خوارزمية التشفير المتماثل هي خوارزمية تشفير سابقة ذات تقنية ناضجة. في خوارزمية التشفير المتماثل، يقوم مرسل البيانات بمعالجة النص العادي (البيانات الأصلية) ومفتاح التشفير (mi yue) مع خوارزمية تشفير خاصة، وتحويلها إلى نص مشفر معقد وإرسالها. بعد أن يتلقى المستلم النص المشفر، إذا أراد فك تشفير النص الأصلي، فإنه يحتاج إلى استخدام المفتاح المستخدم للتشفير والخوارزمية العكسية لنفس الخوارزمية لفك تشفير النص المشفر من أجل استعادته إلى نص عادي قابل للقراءة. في خوارزمية التشفير المتماثل، يتم استخدام مفتاح واحد فقط. يستخدم كل من المرسل والمتلقي هذا المفتاح لتشفير البيانات وفك تشفيرها، وهذا يتطلب من برنامج فك التشفير معرفة مفتاح التشفير مسبقًا.
خوارزميات تشفير جافا البسيطة هي:
BASE بالمعنى الدقيق للكلمة هو تنسيق ترميز، وليس خوارزمية تشفير
MD (خوارزمية ملخص الرسائل، خوارزمية ملخص الرسائل)
SHA (خوارزمية التجزئة الآمنة، خوارزمية التجزئة الآمنة)
HMAC (رمز مصادقة رسالة التجزئة، رمز مصادقة رسالة التجزئة)
النوع 1. القاعدة
تعد Base إحدى طرق التشفير الأكثر شيوعًا لإرسال رموز البت بايت على الإنترنت. يمكنك عرض RFC~RFC، الذي يحتوي على مواصفات تفصيلية لـ MIME. يمكن استخدام التشفير الأساسي لنقل معلومات تعريف أطول في بيئة HTTP. على سبيل المثال، في نظام Hibernate الخاص بـ Java Persistence، يتم استخدام Base لتشفير معرف فريد طويل (عادةً UUID - بت) في سلسلة، والتي يتم استخدامها كمعلمات في نماذج HTTP وعناوين URL لـ HTTP GET. في التطبيقات الأخرى، غالبًا ما يكون من الضروري تشفير البيانات الثنائية في نموذج مناسب لوضعها في عنوان URL (بما في ذلك حقول النماذج المخفية). في هذا الوقت، الترميز الأساسي غير قابل للقراءة، أي أن البيانات المشفرة لن تكون مرئية مباشرة للعين المجردة. (المصدر: موسوعة بايدو)
رمز تنفيذ جافا:
package com.cn. import sun.misc.BASEDecoder; import sun.misc.BASEEncoder;/*التشفير وفك التشفير BASE ثنائي الاتجاه، ويمكن العثور على الحل العكسي الطبقات. على الرغم من أنه يمكن العثور عليه واستخدامه في JDK، إلا أنه لا يمكن العثور عليه في واجهة برمجة التطبيقات (API). الفئات التي تبدأ بـ sun وcom.sun في JRE غير موثقة، وهي تنتمي إلى أساس مكتبات فئات Java وjavax. وترتبط معظم تطبيقاتها بالنظام الأساسي ولا يُنصح بها عمومًا. بالمعنى الدقيق للكلمة، BASE هو تنسيق ترميز، في حين أن الخوارزميات غير المشفرة تتضمن بشكل أساسي فئتين BASEEncoder وBASEDecoder، نحتاج فقط إلى معرفة كيفية استخدام الطرق المقابلة. بالإضافة إلى ذلك، يكون عدد البايتات التي تم إنشاؤها بعد تشفير BASE من مضاعفات . إذا كان عدد البايتات غير كافٍ، فاملأه بالرمز =. BASE وفقًا لتعريف RFC، يتم تعريف Base على النحو التالي: تم تصميم تشفير نقل المحتوى الأساسي لوصف أي تسلسل من البتات في شكل لا يمكن للبشر التعرف عليه بسهولة. (تم تصميم ترميز نقل المحتوى الأساسي لتمثيل تسلسلات عشوائية من الثمانيات في نموذج لا يلزم أن يكون قابلاً للقراءة بواسطة الإنسان.) يتم رؤيته بشكل شائع في رسائل البريد الإلكتروني وتشفير http، عند اعتراض معلومات http، ستجد حقول اسم المستخدم وكلمة المرور لتسجيل الدخول العمليات مشفرة عبر BASE. */public class BASE { /** * فك التشفير BASE* * @param key * @return * @throws Exception */ public static byte[] decryptBASE(String key) throws Exception { return (new BASEDecoder()).decodeBuffer(key } /** * التشفير الأساسي* * @param key * @return * @throws Exception */ public static String encryptBASE(byte[] key) throws Exception. { return (new BASEEncoder()).encodeBuffer(key); out.println("result========= نتيجة البايت[]= BASE.decryptBASE(result); str=new String(result); System.out.println("str==============="+str); } }}
النوع الثاني
MD هي خوارزمية ملخص الرسائل (خوارزمية ملخص الرسائل)، والتي تُستخدم لضمان نقل المعلومات بشكل كامل ومتسق. إنها إحدى خوارزميات التجزئة المستخدمة على نطاق واسع في أجهزة الكمبيوتر (تُترجم أيضًا إلى خوارزمية الملخص وخوارزمية التجزئة التي تم تنفيذها بشكل عام في لغات البرمجة السائدة). يعد حساب البيانات (مثل الأحرف الصينية) في قيمة أخرى ذات طول ثابت هو المبدأ الأساسي لخوارزمية التجزئة. وأسلاف MD هم MD وMD وMD. يستخدم على نطاق واسع في تكنولوجيا التشفير وفك التشفير، وغالبًا ما يستخدم للتحقق من الملفات. يفحص؟ بغض النظر عن حجم الملف، يمكن إنشاء قيمة MD فريدة بعد MD. على سبيل المثال، معايرة ISO الحالية هي معايرة MD. كيفية استخدامه؟ وبطبيعة الحال، يتم إنشاء قيمة MD بعد تمرير ISO من خلال MD. لقد شاهد الأصدقاء الذين قاموا بتنزيل Linux-ISO بشكل عام سلسلة MD بجوار رابط التنزيل. يتم استخدامه للتحقق مما إذا كانت الملفات متسقة.
تنفيذ جافا:
package com.cn. import java.math.BigInteger; import java.security.MessageDigest;/*MD (خوارزمية ملخص الرسائل، خوارزمية ملخص الرسائل) عادةً لا نستخدم تشفير MD المذكور أعلاه بشكل مباشر. عادةً ما يتم تسليم مصفوفة البايت التي تم إنشاؤها بواسطة MD إلى BASE ثم تشفيرها للحصول على ملخص السلسلة المقابلة: التجميع*/public class MD { public static Final String KEY_MD = "MD" public static String getResult(String inputStr) { System .out.println("======== البيانات قبل التشفير:"+inputStr); BigInteger=null حاول {MessageDigest md = messageDigest.getInstance(KEY_MD); byte[] inputData = inputStr.getBytes(); md.update(inputData); bigInteger = new BigInteger(md.digest()); } System.out.println("بعد تشفير MD:" + bigInteger.toString()); bigInteger.toString(); } public static void main(String args[]) { حاول { String inputStr = "getResult(inputStr) } Catch (Exception e) { e.printStackTrace() } }};
تتميز خوارزمية MD بالخصائص التالية:
قابلية الانضغاط: بالنسبة للبيانات بأي طول، يكون طول قيمة MD المحسوبة ثابتًا.
، سهولة الحساب: من السهل حساب قيمة MD من البيانات الأصلية.
مقاومة التعديل: إذا تم إجراء أي تغييرات على البيانات الأصلية، حتى لو تم تعديل بايت واحد فقط، فستكون قيمة MD الناتجة مختلفة تمامًا.
، ضعف مقاومة الاصطدام: بمعرفة البيانات الأصلية وقيمة MD الخاصة بها، من الصعب جدًا العثور على بيانات بنفس قيمة MD (أي البيانات المزورة).
مقاومة قوية للتصادم: من الصعب جدًا العثور على بياناتين مختلفتين بحيث يكون لهما نفس قيمة MD.
تتمثل وظيفة MD في السماح "بضغط" المعلومات ذات السعة الكبيرة في تنسيق سري (أي تحويل سلسلة بايت من أي طول إلى سلسلة من الأرقام السداسية العشرية بطول معين) قبل التوقيع على المفتاح الخاص باستخدام الرقم الرقمي برنامج التوقيع. بالإضافة إلى MD، تشمل أشهرها sha- وRIPEMD وHaval.
النوع الثالث.SHA
تنطبق خوارزمية التجزئة الآمنة بشكل أساسي على خوارزمية التوقيع الرقمي DSA المحددة في معيار التوقيع الرقمي DSS. بالنسبة للرسائل التي يقل طولها عن ^ بت، تنتج SHA ملخصًا للرسالة مكون من بت واحد. لقد تم تطوير هذه الخوارزمية وتحسينها من قبل خبراء التشفير على مر السنين وتم تحسينها بشكل متزايد واستخدامها على نطاق واسع. تتمثل فكرة هذه الخوارزمية في تلقي جزء من النص العادي ثم تحويله إلى جزء من النص المشفر (عادةً ما يكون أصغر) بطريقة لا رجعة فيها، ويمكن أيضًا فهمها ببساطة على أنها تأخذ سلسلة من رموز الإدخال (تسمى التعيين المسبق أو معلومات)، وعملية تحويلها إلى تسلسل إخراج أقصر مكون من أرقام ثابتة، أي قيمة تجزئة (وتسمى أيضًا ملخص الرسالة أو رمز مصادقة الرسالة). يمكن القول أن قيمة دالة التجزئة هي "بصمة" أو "ملخص" للنص العادي، لذلك يمكن اعتبار التوقيع الرقمي لقيمة التجزئة بمثابة التوقيع الرقمي للنص العادي.
تنفيذ جافا:
package com.cn تشفير أحادي الاتجاه؛ import java.math.BigInteger; import java.security.MessageDigest;/*تُستخدم SHA (خوارزمية التجزئة الآمنة)، والتوقيع الرقمي، وأدوات مهمة أخرى في تطبيقات التشفير، على نطاق واسع. ويستخدم على نطاق واسع في مجالات أمن المعلومات مثل التجارة الإلكترونية. على الرغم من اختراق كل من SHA وMD من خلال طرق التصادم، إلا أن SHA لا تزال خوارزمية تشفير آمنة ومعترف بها وأكثر أمانًا من MD*/public class SHA { public static Final String KEY_SHA = "SHA"; public static String getResult( String inputStr) { BigInteger sha =null; inputStr.getBytes(); حاول { messageDigest messageDigest = messageDigest.getInstance(KEY_SHA); messageDigest.update(inputData); sha = new BigInteger(messageDigest.println("بعد تشفير SHA:" + sha.toString()); } Catch (Exception e) {e.printStackTrace();} return sha.toString(); } public static void main(String args[]) { حاول { String inputStr = "تشفير بسيط"; getResult(inputStr);
SHA-مقارنة مع MD
نظرًا لأن كلاهما مشتق من MD، فإن SHA- وMD متشابهان جدًا مع بعضهما البعض. وفي المقابل، فإن نقاط قوتهم وخصائصهم الأخرى متشابهة، ولكن هناك عدة اختلافات:
الأمن ضد هجمات القوة الغاشمة: الفرق الأكثر أهمية والأكثر أهمية هو أن ملخص SHA أطول من ملخص MD. باستخدام تقنيات القوة الغاشمة، فإن صعوبة توليد أي رسالة يكون ملخصها مساويًا لملخص رسالة معين هي عملية من حيث الحجم لـ MD، وعملية من حيث الحجم لـ SHA-. بهذه الطريقة، يتمتع SHA- بقوة أكبر ضد هجمات القوة الغاشمة.
الأمان ضد تحليل الشفرات: نظرًا لتصميم MD، الذي يكون عرضة لهجمات تحليل الشفرات، يبدو SHA- أقل عرضة لمثل هذه الهجمات.
السرعة: SHA- يعمل بشكل أبطأ من MD على نفس الجهاز.
النوع الرابع.HMAC
HMAC (رمز مصادقة رسالة التجزئة، رمز مصادقة رسالة التجزئة، بروتوكول المصادقة استنادًا إلى خوارزمية التجزئة الرئيسية. مبدأ رمز مصادقة الرسالة لتحقيق المصادقة هو استخدام وظيفة عامة ومفتاح لإنشاء قيمة ذات طول ثابت كمعرف مصادقة. استخدم يحدد هذا سلامة الرسالة. استخدم مفتاحًا لإنشاء كتلة بيانات صغيرة ذات حجم ثابت، وهي MAC، وإضافتها إلى الرسالة، ثم إرسالها باستخدام المفتاح المشترك مع المرسل للمصادقة.
رمز تنفيذ جافا:
الحزمة com.cn.تشفير أحادي الاتجاه؛/*HMACHMAC(مصادقة رسالة التجزئة الرمز ورمز مصادقة رسالة التجزئة وبروتوكول المصادقة بناءً على خوارزمية التجزئة الرئيسية. مبدأ رمز مصادقة الرسالة هو استخدام وظيفة عامة ومفتاح لإنشاء قيمة ذات طول ثابت كمعرف مصادقة، واستخدام هذا المعرف لمصادقة سلامة. الرسالة الجنس. استخدم مفتاحًا لإنشاء كتلة بيانات صغيرة ذات حجم ثابت، وهي MAC، وإضافتها إلى الرسالة، ثم إرسالها. يستخدم المتلقي المفتاح المشترك مع المرسل للمصادقة، وما إلى ذلك javax.crypto.KeyGenerator;import javax.crypto.Mac;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import com.cn.comm.Tools;/** * مكون التشفير الأساسي*/ public Abstract class HMAC { public static Final String KEY_MAC = "HmacMD"; /** * تهيئة مفتاح HMAC* * @return * @throws Exception */ public static String initMacKey() throws Exception. { KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC) SecretKey = keyGenerator.generateKey(); return BASE.encryptBASE(secretKey.getEncoded()); /** * تشفير HMAC: الطريقة الرئيسية * * @param data * @param مفتاح * @return * @throws Exception */ public static String encryptHMAC(byte[] data, String key) throws Exception { SecretKey SecretKey = new SecretKeySpec(BASE.decryptBASE(key), KEY_MAC Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); return new String(mac.doFinal(data)); static String getResult(String inputStr) { String path=Tools.getClassPath(); fileSource=path+"/file/HMAC_key.txt"; System.out.println("======== البيانات قبل التشفير:"+inputStr); getBytes(); String key = HMAC.initMacKey(); /*إنشاء مفتاح*/ System.out.println("Mac key:===" + key); Tools.WriteMyFile(fileSource,key); result= HMAC.encryptHMAC(inputData, key); System.out.println("بعد تشفير HMAC:===" + result); );} return result.toString(); } public static String getResult(String inputStr) { System.out.println("======== البيانات قبل التشفير:"+inputStr); String path=Tools.getClassPath(); String fileSource=path+"/file/HMAC_key.txt"; ;; حاول { /*اقرأ المفتاح من الملف*/ key=Tools.ReadMyFile(fileSource); (استثناء e) { e.printStackTrace();} نتيجة السلسلة = فارغة؛ حاول { byte[] inputData = inputStr.getBytes(); /*تشفير البيانات*/ result= HMAC.encryptHMAC(inputData, key); .println("بعد تشفير HMAC:===" + result); } Catch (Exception e) {e.printStackTrace();} return result.toString(); main(String args[]) {try { String inputStr = "تشفير بسيط"/*استخدم نفس المفتاح: تشفير البيانات: تحقق مما إذا كانت نتائج التشفيرين متطابقة*/ getResult(inputStr); getResult(inputStr } Catch (Exception e) { e.printStackTrace();
المحتوى أعلاه هو خوارزميات التشفير المتعددة (أربعة أنواع) المستخدمة بشكل شائع في Java والتي شاركها المحرر، أتمنى أن تنال إعجابك.