مرحبا يا هبر! أقدم إليكم ترجمة المقال الثالث "Java MessageDigest" لجاكوب جينكوف من سلسلة من المقالات للمبتدئين الذين يرغبون في تعلم أساسيات التشفير في جافا.
جدول المحتويات:
- التشفير
- صفر
- MessageDigest
- ماك
- توقيع
- KeyPair
- KeyGenerator
- KeyPairGenerator
- تخزين المفاتيح
- Keytool
- شهادة
- CertificateFactory
- CertPath
جافا MessageDigest
تمثل فئة MessageDigest فئة Java وظيفة تجزئة التشفير التي يمكنها حساب ملخص الرسالة من البيانات الثنائية. عندما تتلقى مجموعة من البيانات المشفرة ، لا يمكنك التأكد من عدم تغييرها أثناء النقل. يساعد ملخص الرسالة على حل هذه المشكلة.
لتحديد ما إذا كان قد تم تعديل البيانات المشفرة أثناء النقل ، يجب على المرسل حساب ملخص الرسالة من البيانات وإرسالها مع البيانات. يمكن للجانب الآخر ، الذي يستقبل البيانات المشفرة وخلاصة الرسالة ، إعادة حساب خلاصة الرسالة من البيانات والتحقق مما إذا كانت خلاصة الرسالة المحسوبة تتطابق مع خلاصة الرسالة المستلمة مع البيانات. في حالة تطابق هضم الرسالة اثنين ، هناك فرصة أن البيانات المشفرة لم يتم تغييرها أثناء النقل.
هناك العديد من الشروط التي يجب الوفاء بها حتى يكون ملخص الرسالة مفيدًا كآلية الكشف عن التغيير. ومع ذلك ، فإن الشروط الدقيقة هي جزء من نظرية التشفير التي لم يتم مناقشتها في هذه المقالة ، ولكن تشرح فقط كيفية استخدام Java لتلقي ملخص الرسالة في فئة MessageDigest.
إنشاء مثيل من MessageDigest
لإنشاء مثيل لفئة MessageDigest ، يتم استدعاء الأسلوب getInstance () الثابت للفئة MessageDigest. فيما يلي مثال على إنشاء مثيل لـ MessageDigest:
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
تحدد معلمة السلسلة التي تم تمريرها إلى أسلوب getInstance () خوارزمية الخلاصة المستخدمة لرسالة معينة.
رسالة الخوارزميات الخلاصة
تدعم Java Cryptography API خوارزميات تجميع الرسائل التالية (يمكن لموفري التشفير الخارجيين دعم المزيد):
- MD2
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA-512
ليست كل هذه الخوارزميات آمنة بنفس القدر. في وقت كتابة هذا التقرير ، يوصى باستخدام SHA-256 أو أعلى للحصول على أعلى مستوى ممكن من الأمان.
حساب رسالة الخلاصة
بإنشاء مثيل لـ MessageDigest ، يمكنك استخدامه لحساب ملخص الرسالة. إذا كان لديك كتلة بيانات واحدة لحساب ملخص الرسالة ، فاستخدم طريقة digest () . إليك ما يبدو عليه حساب ملخص الرسالة من كتلة بيانات واحدة:
byte[] data1 = "0123456789".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] digest = messageDigest.digest(data1);
إذا كان هناك العديد من كتل البيانات لتضمينها في ملخص الرسالة نفسه ، فاتصل بطريقة التحديث () وانتهي بالملخص () إليك ما تبدو عليه عملية حساب ملخص الرسالة من كتل بيانات متعددة:
byte[] data1 = "0123456789".getBytes("UTF-8"); byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.update(data1); messageDigest.update(data2); byte[] digest = messageDigest.digest();