MD5 وتجزئة SHA في جافا

MD5 هي واحدة من سلسلة الخوارزميات التي طورها البروفيسور رونالد ريفست في جامعة معهد ماساتشوستس للتكنولوجيا (ريفيست ، 1994). عندما أشار العمل إلى أن MD4 من المحتمل أن يكون غير آمن ، تم تصميم MD5 ليحل محل MD4. تم العثور على نقاط الضعف في MD4 لاحقا بواسطة Hans Dobbertin.
تم تصميم وظائف تجزئة SHA بواسطة وكالة الأمن القومي الأمريكية (NSA). SHA تعني خوارزمية التجزئة الآمنة. يتم تنظيم خوارزميات SHA الثلاثة بشكل مختلف ويتم تمييزها بواسطة SHA-0 و SHA-1 و SHA-2. تستخدم عائلة SHA-2 خوارزمية متطابقة ذات حجم هضم متغير يتميز ب SHA-224 و SHA-256 و SHA-384 و SHA-512.< / blockquote>يشرح هذا البرنامج التعليمي كيفية تجزئة سلسلة ، وكلمات المرور بشكل متكرر لأسباب أمنية باستخدام طريقتين للتجزئة MD5 و SHA-256. يسمح لك التجزئة بالتشفير في اتجاه واحد فقط ، وهذه هي أكبر ميزة لها ، وبالتالي فإن التجزئة لا رجعة فيها ، على عكس التشفير ، الذي يستخدم مفتاحا للتشفير وفك التشفير.

تجزئة سلسلة باستخدام MD5

في هذا المثال ، نقوم بتجزئة كلمة مرور باستخدام خوارزمية MD5.

import java.security.MessageDigest; 

الفئة العامة md5_java
{
الفراغ العام الثابت الرئيسي (سلسلة [] args) يلقي استثناء < br / > {
كلمة مرور السلسلة = "123456789" ؛

MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());

بايت بايت البيانات [] = md.digest ();

// تحويل صفيف البت إلى تنسيق سداسي عشري - الطريقة 1
StringBuffer sb = StringBuffer جديد () ؛
ل (int i = 0 ؛ i < byteData.length ؛ i ++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}

System.out.println("بتنسيق سداسي: " + sb.toString());

// تحويل bitarray إلى تنسيق سداسي عشري - الطريقة 2
StringBuffer hexString = StringBuffer جديد () ؛
ل (int i=0; أنا< بايت داتا.طول; i++) {
String hex=Integer.toHexString(0xff & byteData[i]);
if (hex.length () == 1) hexString.append ('0');
hexString.append(hex);
}
System.out.println("بتنسيق سداسي: " + hexString.toString());
}
}
< / pre> الإخراج:

< pre class = "prettyprint lang-java" >
بتنسيق hexa: 25f9e794323b453885f5181f1b624d0b
بتنسيق سداسي: 25f9e794323b453885f5181f1b624d0b< / pre>

لماذا يجب علينا استخدام SHA-256 بدلا من MD5 < / h2 > تم اختراق أمان MD5 بشكل خطير ، وقد استغلت نقاط ضعفها على أرض الواقع. يعد استخدام MD5 لكلمات المرور فكرة سيئة لأنها ليست طريقة آمنة. يجب عليك دائما استخدام SHA للبيانات الحساسة مثل كلمات مرور المستخدم.

import java.security.MessageDigest; 

الفئة العامة sha_java
{
الفراغ العام الثابت الرئيسي (سلسلة [] args) يلقي استثناء < br / > {
كلمة مرور السلسلة = "123456789" ؛

MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(password.getBytes());

بايت بايت البيانات [] = md.digest ();

// تحويل صفيف البت إلى تنسيق سداسي عشري - الطريقة 1
StringBuffer sb = StringBuffer جديد () ؛
ل (int i = 0 ؛ i < byteData.length ؛ i ++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}

System.out.println("بتنسيق سداسي: " + sb.toString());

// تحويل bitarray إلى تنسيق سداسي عشري - الطريقة 2
StringBuffer hexString = StringBuffer جديد () ؛
ل (int i=0; أنا< بايت داتا.طول; i++) {
String hex=Integer.toHexString(0xff & byteData[i]);
if (hex.length () == 1) hexString.append ('0');
hexString.append(hex);
}
System.out.println("بتنسيق سداسي: " + hexString.toString());
} < br / >}
< / pre> الإخراج:

< pre class = "prettyprint lang-java" >
بتنسيق hexa: 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225
بتنسيق سداسي: 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225

المراجع:
https:// en.wikipedia.org/wiki/MD5
https://en.wikipedia.org/wiki/Secure_Hash_Algorithm
ما مدى ضعف MD5 كدالة تجزئة لكلمة المرور؟

Advertisement

AdBlock Detected

Please disable your ad blocker and refresh the window to use this website.