الأساسيات: استخدام فئة MessageDigest
في الواقع ، لاستكمال تشفير MD5 في Java ، سوف يساعدك معظم فئة MessagedIgest في تنفيذها ، وبعض أسطر الكود كافية:
/** * تشفير السلسلة md5 * * param str * regurn */import java.security.messagedigest ؛ السلسلة الثابتة العامة getMd5 (String str) {try {// إنشاء حساب تشفير md5 desagedigest md = messagedigest.getInstance ("md5") ؛ // حساب وظيفة md5 md.update (str.getBytes ()) ؛ // Digest () يحدد أخيرًا أن قيمة تجزئة MD5 ، وقيمة الإرجاع هي 8 كسلسلة. نظرًا لأن قيمة التجزئة MD5 هي قيمة سداسية سداسية 16 بت ، فهي في الواقع حرف 8 بت // BigInteger تحول سلسلة 8 بت إلى قيمة سداسية 16 بت ، وتمثلها كسلسلة ؛ يحصل على قيمة التجزئة في شكل سلسلة إرجاع BigInteger جديد (1 ، MD.Digest ()). toString (16) ؛ } catch (استثناء e) {رمي New SpeedException ("حدث خطأ في تشفير MD5") ؛ }} متقدم: التشفير والتشفير
تقوم Java بتنفيذ فئات تشفير MD5 وفك التشفير ، مع فئات الاختبار ، راجع الكود للحصول على التفاصيل.
MD5 تشفير وفئة فك التشفير - mymd5util ، الرمز كما يلي
package com.zyg.security.md5 ؛ import java.io.unsupportedencodingexception ؛ import java.security.messagedigest ؛ import HEX_NUMS_STR = "0123456789ABCDEF" ؛ integer integer integer salt_length = 12 ؛ / ** * تحويل سلاسل Hex إلى صفيف بايت * param hex * @return * / public static byte [] HexStringTobyte (String hex) {int len = (hex.length () / 2) ؛ byte [] result = new byte [len] ؛ char [] hexchars = hex.tochararray () ؛ لـ (int i = 0 ؛ i <len ؛ i ++) {int pos = i * 2 ؛ النتيجة [i] = (byte) (hex_nums_str.indexof (hexchars [pos]) << 4 | Hex_nums_str.indexof (hexchars [pos + 1]) ؛ } نتيجة الإرجاع ؛ } / ** * قم بتحويل صفيف البايت المحدد إلى سلسلة hex * param b * @return * / السلسلة الثابتة العامة bytetoHexstring (byte [] b) {StringBuffer HexString = new StringBuffer () ؛ لـ (int i = 0 ؛ i <b.length ؛ i ++) {string hex = integer.toHexString (b [i] & 0xff) ؛ if (hex.length () == 1) {hex = '0' + hex ؛ } hexstring.append (Hex.ToupperCase ()) ؛ } إرجاع hexstring.toString () ؛ } /** * تحقق مما إذا كانت كلمة المرور هي قانونية * param password * param passwordb * return * throws nosuchalgorithmexception * throws unsupportedEncodingexception * /public static boolean valappassword (string passwordb) byte [] pwDIndB = HexStringTobyte (passwordIndB) ؛ // إعلان البايت المتغير الملح [] الملح = بايت جديد [Salt_Length] ؛ // استخراج الملح من صفيف البايت المحفوظ في نظام قاعدة البيانات. // إنشاء رسالة Digest Object messagedigest md = messagedigest.getInstance ("md5") ؛ // إيقاف بيانات الملح في كائن هضم الرسالة md.update (Salt) ؛ // تمرير بيانات كلمة المرور إلى كائن Message Digest Md.update (password.getBytes ("UTF-8")) ؛ // قم بإنشاء Message Digest of the Password Byte [] Digest = Md.Digest () ؛ // إعلان متغير يحفظ هضم رسالة كلمة المرور في قاعدة البيانات [] DigestIndB = new byte [pwDindb.length - salt_length] ؛ // احصل على هضم رسالة كلمة المرور في نظام قاعدة البيانات. // قارن ما إذا كان هضم الرسالة الذي تم إنشاؤه استنادًا إلى كلمة مرور الإدخال هو نفس مهرج الرسالة في قاعدة البيانات إذا (المصفوفات. } آخر {// كلمة مرور إرجاع كلمة مرور الإرجاع رسالة غير متطابقة خاطئة ؛ }} /** * احصل على كلمة المرور السداسية المشفرة * param password * return * throws nosuchalgorithmexception * throws unsupportedencodingexception * /public static string getencryptedpwd (string password) rewwors nosuchalgorithmexception ، Byte [] pwd = null ؛ // generator number securerandom عشوائي = جديد securerandom () ؛ // إعلان بايت صفيف الملح البايت [] الملح = بايت جديد [salt_length] ؛ // ضع الرقم العشوائي في متغير الملح العشوائي. nextbytes (SALT) ؛ // إعلان رسالة هضم الكائن messagedigest md = null ؛ // إنشاء Message Digest MD = messagedigest.getInstance ("MD5") ؛ // إيقاف بيانات الملح في كائن هضم الرسالة md.update (Salt) ؛ // تمرير بيانات كلمة المرور إلى كائن Message Digest Md.update (password.getBytes ("UTF-8")) ؛ // احصل على صفيف البايت للرسالة Digest Byte [] Digest = Md.Digest () ؛ // لأن الملح يتم تخزينه في صفيف البايت من كلمة المرور ، أضف طول البايت للملح PWD = New Byte [Digest.Length + Salt_Length] ؛ // انسخ بايت الملح إلى أول 12 بايت من صفيف بايت كلمة المرور المشفرة التي تم إنشاؤها ، وذلك لإخراج الملح عند التحقق من نظام كلمة المرور. // انسخ هضم الرسالة إلى البايتات في صفيف البايت المشفرة للبايت بدءًا من نظام البايت الثالث عشر. // قم بتحويل تنسيق كلمة مرور البايت المشفرة إلى كلمة مرور سلسلة كلمة مرور سداسي عشرية (PWD) ؛ }}فئة الاختبار - العميل ، الرمز كما يلي:
package com.zyg.security.md5 ؛ import java.io.unsupportedEncodingException ؛ import java.security.nosuchalgorithmexception ؛ import java.util.hashmap ؛ import java.util.map ؛ public client client {private static map users = new ashmap () ؛ public static void main (string [] args) {String username = "zyg" ؛ سلسلة كلمة المرور = "123" ؛ RegisterUser (اسم المستخدم ، كلمة المرور) ؛ اسم المستخدم = "Changong" ؛ كلمة المرور = "456" ؛ RegisterUser (اسم المستخدم ، كلمة المرور) ؛ سلسلة logInUserId = "zyg" ؛ سلسلة pwd = "1232" ؛ جرب {if (logInValId (loginuserId ، pwd)) {system.out.println ("مرحبًا بك في تسجيل الدخول !!!") ؛ } آخر {system.out.println ("خطأ كلمة المرور ، يرجى إعادة الدخول !!!") ؛ }} catch (nosuchalgorithmexception e) {// todo catch catch e.printstacktrace () ؛ } catch (UnsupportedEncodingException e) {// todo catch catch e.printstacktrace () ؛ }} / ** * مستخدم مسجل * * param username * param password * / public static void registerUser (string username ، string password) {string encryptedPWD = null ؛ حاول {EncryptedPwd = mymd5util.getencryptedpwd (كلمة المرور) ؛ المستخدمين (اسم المستخدم ، incryptedPWD) ؛ } catch (nosuchalgorithmexception e) {// todo catch catch e.printstacktrace () ؛ } catch (UnsupportedEncodingException e) {// todo catch catch e.printstacktrace () ؛ } ستر (سلسلة) المستخدمين (اسم المستخدم) ؛ if (null! = pwdindb) {// هذا المستخدم إرجاع mymd5util.validpassword (كلمة المرور ، pwdindb) ؛ } آخر {system.out.println ("هذا المستخدم غير موجود!!!") ؛ العودة كاذبة }}}ملاحظة: فيما يلي أداة تشفير MD5 أخرى لك. يمكن للأصدقاء المهتمين الرجوع إليها:
أداة التشفير عبر الإنترنت MD5:
http://tools.vevb.com/password/createmd5password
عبر الإنترنت MD5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160 أداة التشفير:
http://tools.vevb.com/password/hash_md5_sha