تقدم هذه المقالة بشكل أساسي خوارزميات التشفير شائعة الاستخدام لتنفيذ Java - خوارزميات التشفير أحادية الاتجاه MD5 و SHA ، على النحو التالي:
1. بنية أمن جافا
1.1 مقدمة لعمارة أمن جافا
توفير الفصول والواجهات لأطر الأمان في Java. JDK Security API هي واجهة برمجة التطبيقات الأساسية للغة البرمجة Java ، والتي تقع في حزمة Java.Security (وحالاتها الفرعية) ، بالإضافة إلى حزمة Sun.Securityapi (وحالاتها الفرعية). تم تصميمه لمساعدة المطورين على استخدام كل من ميزات الأمان المنخفضة المستوى والمتقدمة في برامجهم.
قدم الإصدار الأول من JDK في JDK 1.1 "بنية تشفير Java" (JCA) ، والتي تشير إلى البنية المستخدمة للوصول إلى وظائف كلمة مرور Java Platform. في JDK 1.1 ، يتضمن JCA واجهة برمجة تطبيقات لتوقيعات الرقمية وهضم الرسائل. يمتد JDK 1.2 إلى حد كبير بنية تشفير Java ، كما أنه يقوم بترقية البنية التحتية لإدارة الشهادات لدعم شهادات X.509 V3 ، وتقدم بنية أمان Java جديدة للتحكم في الوصول الدقيق ، القابل للتكوين ، والمرونة والقابلة للتمديد.
تتضمن بنية تشفير Java الأجزاء المتعلقة بكلمة مرور في واجهة برمجة تطبيقات الأمان JDK 1.2 ، بالإضافة إلى مجموعة من الاتفاقيات والمواصفات المقدمة في هذا المستند. لتنفيذ كلمات مرور متعددة قابلة للتشغيل البيني ، فإنه يوفر أيضًا بنية "مزود".
يمتد ملحق كلمة مرور Java (JCE)) من JCA API ، بما في ذلك واجهات برمجة التطبيقات للتشفير ، وتبادل المفاتيح ، ورموز مصادقة المعلومات (MAC). توفر كلمات مرور JCE و JDK معًا واجهة برمجة تطبيقات كلمة مرور كاملة غير مرتبطة بالنظام الأساسي. سيتم إصدار JCE كامتداد لـ JDK بشكل مستقل للامتثال لقيود التحكم في التصدير.
1.2 رمز المصدر ذي الصلة من JDK في Eclipse
من أجل الحصول على فهم أعمق لتنفيذ خوارزميات التشفير أحادي الاتجاه MD5 و SHA في Java ، يمكن أن يرتبط الكود المصدري لـ JDK باستخدام Eclipse IDE (يستخدم المؤلف JDK6.0).
بعد اكتمال تثبيت JDK6.0 ، يوجد دليل SRC.ZIP في الدليل الجذر لـ JDK (على سبيل المثال C: /java/jdk1.6.0_21). يمكن إلغاء ضغط هذا الدليل إلى دليل آخر (على سبيل المثال D:/Amigo/Study/Entical Essay/201405). SRC.ZIP لا يحتوي على جميع رمز مصدر JDK. على سبيل المثال ، لا توجد الحالات الفرعية تحت الشمس في SRC.ZIP (على سبيل المثال ، لا يتم تضمين حزمة Sun.Security وعلاجها الفرعية المستخدمة في هذه المقالة).
لتنزيل هذه الحالات الفرعية ، تحتاج إلى تنزيل الكود المصدري لـ OpenJDK. OpenJDK هو الإصدار مفتوح المصدر من JDK ويتم إصداره في شكل بروتوكول GPL. في JDK7 ، أصبح Openjdk هو التطوير العمود الفقري لـ JDK7. تم إصدار Sun JDK7 على أساس OpenJDK7. معظم رموزها الأصلية هي نفسها ، وتم استبدال جزء صغير فقط من الرموز الأصلية. تم نشره باستخدام JRL (ترخيص Javaresearch ، اتفاقية ترخيص البحوث Java).
OpenJDK عنوان تنزيل: //www.vevb.com/softs/75724.html
بعد التنزيل ، انسخ جميع الملفات والمجلدات في OpenJDK-6-SRC-B27-26_OCT_2012/JDK/SRC/Share/Classes إلى دليل SRC غير المصدفة.
بعد ذلك ، قم بتكوين رمز المصدر المرتبط به في Eclipse: انقر فوق "Windows"-> "التفضيلات" ، وحدد "Java"-> "JRES المثبتة" في القائمة اليسرى. إذا تم تكوين JRE من هذا الجهاز ، فلن تحتاج إلى تكوينه. إذا لم يتم تكوينه ، فانقر فوق الزر "إضافة" على اليمين وحدد مسار JDK6.0 المثبت في نافذة "إضافة JRE" (على سبيل المثال. C: /java/jdk1.6.0_21). انقر فوق الزر "موافق" لإكمال إعدادات JRE.
حدد SET JRE ، انقر فوق الزر "تحرير ..." على اليمين ، حدد حزمة RT.JAR في النافذة المنبثقة ، انقر فوق الزر "مرفق المصدر ..." ، انقر فوق الزر "المجلد الخارجي ..." في النافذة المنبثقة ، وقم بتوجيه مسار الكود المصدر إلى مسار SRC الآن (على سبيل المثال. D:/Amigo/Study/Tructive Essay/201405). انظر الشكل أدناه:
بعد النقر فوق الزر "موافق" لإعداده ، عند كتابة تنفيذ MD5 و SHA ، عند استدعاء الأساليب ذات الصلة من MessagedIgest ، يمكنك استخدام تصحيح الأخطاء أحادية الخطوة في وضع التصحيح F5 لعرض الفصول بشكل رئيسي في تنفيذ MD5 و SHA أحادي الاتجاه في جافا.
1.3 الطبقات الرئيسية من تشفير MD5 و SHA في JDK
في JDK6.0 ، فإن الرسوم البيانية للصف من عدة فصول مرتبطة ارتباطًا وثيقًا بـ MD5 و SHA على النحو التالي:
من بينها ، "Messagedigestspi" هي الفئة التجريدية ذات المستوى الأعلى ، و "MessagedIgest" و "DigestBase" تحت نفس الحزمة هي فئات فرعية.
في مخطط الفصل أعلاه ، يتم استخدام نمط تصميم المندوب. مبدأ هذا النمط هو أن الفئة B (هنا هي الفئة الداخلية للبود) والفئة A (هنا هي فئة MessagedIgestSpi) هما فئتان ليس لهما علاقة مع بعضهما البعض. B لديه بالضبط نفس الطرق والسمات مثل A ؛ ويبدو أن أساليب الاتصال والسمات في B هي استدعاء الأساليب والسمات التي تحمل نفس الاسم في A. B ، ويبدو أن الوسيط المصرح به من قبل A. رمز الطرف الثالث لا يحتاج إلى معرفة وجود A ودراسيه الفرعية ، ولا يحتاج إلى اتصال مباشر مع A ومساحاته الفرعية. من خلال B ، يمكن استخدام وظائف A مباشرة ، والتي لا يمكن أن تستخدم فقط وظائف مختلفة من A ، ولكن أيضًا حماية A ودراساته الفرعية جيدًا.
إن الرموز ذات الصلة لـ MD5 و SHA كلها في فصول مثل MD5 و SHA ، لكن فئة Messagedigest Abstract التي تواجه العميل لا تحتاج إلى التعامل مع فئات التنفيذ المختلفة ، فقط التعامل معها من خلال فئة المندوبين.
2. تشفير MD5
2.1 نظرة عامة
خوارزمية Message Digest MD5 (الاسم الصيني هو Message Digest Emorithm Edition Fifth) هي وظيفة تجزئة تستخدم على نطاق واسع في مجال أمان الكمبيوتر لتوفير حماية تكامل الرسائل. رقم ملف هذه الخوارزمية هو RFC 1321 (R.Rivest ، مختبر معهد ماساتشوستس للتكنولوجيا لعلوم الكمبيوتر و RSA Data Security Inc. April 1992).
الاسم الكامل لـ MD5 هو خوارزمية هجمات الرسائل 5 (خوارزمية غشاء المعلومات) ، التي طورها رونالد ل. ريفيست من مختبر معهد ماساتشوستس للتكن
يتم استخدام MD5 لضمان نقل المعلومات الكامل والمتسق. إنها واحدة من خوارزميات التجزئة المستخدمة على نطاق واسع من قبل أجهزة الكمبيوتر (تُرجم أيضًا كخوارزمية مجردة وخوارزمية التجزئة). يتم تنفيذ لغات البرمجة الرئيسية بشكل عام بواسطة MD5. يعد حساب البيانات (مثل الأحرف الصينية) في قيمة أخرى ثابتة الطول هو المبدأ الأساسي لخوارزمية التجزئة. وكان سابقي MD5 هم MD2 و MD3 و MD4.
تتمثل وظيفة MD5 في السماح "بالضغط" على معلومات السعة الكبيرة في تنسيق سري قبل توقيع مفتاح خاص مع برنامج توقيع رقمي (أي ، لتحويل سلسلة بايت من أي طول إلى سلسلة سداسية من الطول معين).
2.2 مبادئ الخوارزمية
يمكن أن يكون وصف موجز لخوارزمية MD5 كما يلي: يعالج MD5 معلومات الإدخال في حزم 512 بت ، ويتم تقسيم كل حزمة إلى 16 حزمة فرعية 32 بت. بعد سلسلة من المعالجة ، يتكون إخراج الخوارزمية من أربع حزم 32 بت. بعد تشكيل هذه الحزم الأربع 32 بت ، سيتم إنشاء قيمة تجزئة 128 بت.
في خوارزمية MD5 ، يجب ملء المعلومات أولاً ، بحيث تكون نتيجة الرصيد المتبقي لزوج طول البت 512 تساوي 448. لذلك ، سيتم تمديد طول المعلومات إلى N*512+448 ، n هو عدد صحيح غير سالكي ، ويمكن أن يكون n Zero. طريقة التعبئة هي كما يلي: املأ 1 وعدد لا يحصى من 0s خلف المعلومات ، وتوقف عن ملء المعلومات بـ 0 حتى يتم استيفاء الشروط المذكورة أعلاه. بعد ذلك ، يتم إرفاق طول المعلومات العلوية في ثنائي 64 بت. بعد هاتين الخطوتين من المعالجة ، طول البت للمعلومات = N*512+448+64 = (N+1)*512 ، أي أن الطول هو بالضبط عدد صحيح من 512. والسبب في ذلك هو تلبية المتطلبات للحصول على طول المعلومات في المعالجة اللاحقة.
2.3 تنفيذ MD5 في جافا
إن تنفيذ Java لخوارزمية تشفير MD5 كما يلي:
package amigo.endecrypt ؛ import java.security.messagedigest ؛/*** استخدم md5 تشفير* Author xingxing ، xie* datetime 2014-5-31*/public class md5util {/**** md5 encryption توليد 32-bit md5. رمز*/ سلسلة ثابتة عامة md5encode (string instr) يلقي الاستثناء {messagedigest md5 = null ؛ حاول {md5 = messagedigest.getInstance ("md5") ؛ } catch (استثناء e) {system.out.println (e.toString ()) ؛ E.PrintStackTrace () ؛ يعود ""؛ } byte [] bytearray = instr.getBytes ("utf-8") ؛ byte [] md5bytes = md5.digest (bytearray) ؛ StringBuffer hexvalue = new StringBuffer () ؛ لـ (int i = 0 ؛ i <md5bytes.length ؛ i ++) {int val = ((int) md5bytes [i]) & 0xff ؛ if (val <16) {hexvalue.append ("0") ؛ } hexvalue.append (integer.toHexString (val)) ؛ } إرجاع hexvalue.toString () ؛ } / ** * اختبار الوظيفة الرئيسية * param args * athrows استثناء * / public static void main (string args []) reforms {string str = new string ("amigoxiexiexingxing") ؛ System.out.println ("Original:" + Str) ؛ System.out.println ("MD5:" + Md5encode (Str)) ؛ }}نتائج الاختبار:
الأصل: amigoxiexiexingxing
Post-MD5: E9AC094091B96B84CCA48098BC21B1D6
3. تشفير SHA
3.1 نظرة عامة
SHA هي خوارزمية تشفير البيانات. تم تطوير هذه الخوارزمية وتحسينها من قبل خبراء التشفير على مر السنين وأصبحت مثالية بشكل متزايد. لقد أصبحت الآن واحدة من أكثر خوارزميات التجزئة أمانًا المعترف بها وتم استخدامها على نطاق واسع. تتمثل فكرة هذه الخوارزمية في تلقي نص عادي ثم تحويله إلى نص مشفر (عادة أصغر) بطريقة لا رجعة فيها. يمكن أيضًا فهمه ببساطة على أنها عملية أخذ سلسلة من رموز الإدخال (تسمى premapping أو المعلومات) وتحويلها إلى تسلسل إخراج أقصر طول أو رقمين ، أي قيم التجزئة (المعروفة أيضًا باسم هضم المعلومات أو رمز مصادقة المعلومات). يمكن القول أن قيمة وظيفة التجزئة هي نوع من "بصمات الأصابع" أو "ملخص" للنص العادي ، وبالتالي يمكن اعتبار التوقيع الرقمي لقيمة التجزئة هو التوقيع الرقمي للنص العادي.
خوارزمية التجزئة الآمنة (SHA) هي National Standard Fips Pub 180 التي أصدرها المعهد الوطني للمعايير والتكنولوجيا. تم تحديث أحدث المعيار إلى FIPS Pub 180-3 في عام 2008. من بينها ، تم تحديد العديد من خوارزميات التجزئة أحادية الاتجاه مثل SHA-1 و SHA-224 و SHA-256 و SHA-384 و SHA-512. SHA-1 و SHA-224 و SHA-256 مناسبة للرسائل التي لا يزيد طولها عن 2^64 بتات ثنائية. SHA-384 و SHA-512 مناسبة للرسائل التي لا يزيد طولها عن 2^128 بتات ثنائية.
3.2 مبدأ
SHA-1 هي خوارزمية تشفير البيانات. تتمثل فكرة هذه الخوارزمية في تلقي نص عادي ثم تحويله إلى نص مشفر (عادة أصغر) بطريقة لا رجعة فيها. يمكن أيضًا فهمه ببساطة على أنها عملية أخذ سلسلة من رموز الإدخال (تسمى premapping أو المعلومات) وتحويلها إلى تسلسل إخراج أقصر طول أو رقمين ، أي قيم التجزئة (المعروفة أيضًا باسم هضم المعلومات أو رمز مصادقة المعلومات).
تكمن سلامة وظيفة التجزئة أحادية الاتجاه في الطبيعة القوية في اتجاه واحد لعملية تشغيلها لتوليد قيم التجزئة. إذا تم تضمين كلمة المرور في تسلسل الإدخال ، فلن يتمكن أحد من إنشاء قيمة التجزئة الصحيحة دون معرفة كلمة المرور ، وبالتالي ضمان أمانها. يحجب SHA تدفقات الإدخال في 512 بت (64 بايت) لكل كتلة وتنتج 20 بايت من الإخراج يسمى رمز مصادقة المعلومات أو هضم المعلومات.
طول حزم الإدخال في هذه الخوارزمية غير محدودة ، والإخراج الذي تم إنشاؤه هو عبارة عن رسالة 160 بت. تتم معالجة الإدخال في حزم 512 بت. SHA-1 لا رجعة فيه ، مقاوم للصراع ، وله تأثير جيد للانهيار.
يمكن تنفيذ التوقيع الرقمي من خلال خوارزمية التجزئة. يتمثل مبدأ التوقيع الرقمي في تحويل النص العادي ليتم نقله إلى هضم رسالة من خلال عملية دالة (HASH) (تتوافق نصوص عادية مختلفة مع هضم الرسائل المختلفة). يتم تشفير Message Digest وإرساله إلى المستلم مع النص العادي. يقوم المستلم بإنشاء رسالة رسالة جديدة لفك تشفيرها ومقارنة هضم رسالة المرسل. نتيجة المقارنة متسقة ، مما يعني أنه لم يتم تغيير النص العادي. إذا كان الأمر غير متسق ، فهذا يعني أن النص العادي قد تم العبث به.
Mac (رمز مصادقة المعلومات) هو نتيجة تجزئة ، حيث يكون جزء من معلومات الإدخال كلمة مرور. يمكن فقط للمشاركين الذين يعرفون كلمة المرور هذه حساب والتحقق من شرعية رمز MAC مرة أخرى.
3.3 تطبيق SHA في Java
يشبه تطبيق Java لـ SHA MD5 ، والرمز المرجعي هو كما يلي:
package amigo.endecrypt ؛ import java.security.messagedigest ؛/*** استخدم shaa encryption* author xingxing ، xie* dateTime 2014-6-1*/public class shautil {/*** Shaencode (String Instr) يلقي استثناء {messagedigest sha = null ؛ حاول {sha = messagedigest.getInstance ("sha") ؛ } catch (استثناء e) {system.out.println (e.toString ()) ؛ E.PrintStackTrace () ؛ يعود ""؛ } byte [] bytearray = instr.getBytes ("utf-8") ؛ byte [] md5bytes = sha.digest (bytearray) ؛ StringBuffer hexvalue = new StringBuffer () ؛ لـ (int i = 0 ؛ i <md5bytes.length ؛ i ++) {int val = ((int) md5bytes [i]) & 0xff ؛ if (val <16) {hexvalue.append ("0") ؛ } hexvalue.append (integer.toHexString (val)) ؛ } إرجاع hexvalue.toString () ؛ } / ** * اختبار الوظيفة الرئيسية * param args * athrows استثناء * / public static void main (string args []) reforms {string str = new string ("amigoxiexiexingxing") ؛ System.out.println ("Original:" + Str) ؛ system.out.println ("sha:" + shaencode (str)) ؛ }}نتائج الاختبار كما يلي:
الأصل: amigoxiexiexingxing
بعد SHA: 04F79F496DD6BDAB3439511606528A4AD9CAAC5E
3. مقارنة بين SHA-1 و MD5
نظرًا لأن كلاهما مشتق من MD4 ، فإن SHA-1 و MD5 متشابهان جدًا مع بعضهما البعض. في المقابل ، تتشابه قوتها وخصائصها الأخرى ، ولكن هناك أيضًا اختلافات في النقاط التالية:
1) الأمن ضد الهجمات القسرية: الفرق الأكثر أهمية وهامة هو أن Digest SHA-1 هو 32 بت من دايجست MD5. باستخدام التكنولوجيا القسرية ، فإن صعوبة توليد أي رسالة بحيث يكون Digest مساوياً لهضم معين هو عملية بترتيب 2^128 لـ MD5 وتشغيل 2^160 لـ SHA-1. وبهذه الطريقة ، يتمتع SHA-1 بقوة أكبر للهجمات القسرية.
2) أمان تحليل كلمة المرور: نظرًا لتصميم MD5 ، فإنه معرض لتحليل كلمة المرور ، ويبدو أن SHA-1 أقل عرضة لمثل هذه الهجمات.
3) السرعة: على نفس الأجهزة ، يعمل SHA-1 ببطء من MD5.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.