พื้นฐาน: การใช้คลาส MessageGeSest
ในความเป็นจริงเพื่อให้การเข้ารหัส MD5 เสร็จสมบูรณ์ใน Java คลาส MessageDigest ส่วนใหญ่จะช่วยให้คุณใช้งานได้และรหัสสองสามบรรทัดก็เพียงพอแล้ว:
/** * เข้ารหัสสตริง md5 * * @param str * @return */นำเข้า java.security.messageDigest; สตริงคงที่สาธารณะ getMd5 (สตริง str) {ลอง {// สร้างการคำนวณการเข้ารหัส MD5 md5 ") md5"); // คำนวณฟังก์ชั่น md5 md.update (str.getBytes ()); // digest () ในที่สุดก็กำหนดว่าค่าแฮช MD5 ส่งคืนและค่าส่งคืนคือ 8 เป็นสตริง เนื่องจากค่าแฮช MD5 เป็นค่า hex 16 บิตจึงเป็นตัวละคร 8 บิต // ฟังก์ชั่น BigInteger แปลงสตริง 8 บิตเป็นค่า hex 16 บิตและแสดงว่าเป็นสตริง; รับค่าแฮชในรูปแบบของสตริงส่งคืน BigInteger ใหม่ (1, Md.Digest ()). ToString (16); } catch (exception e) {โยน speedexception ใหม่ ("ข้อผิดพลาดการเข้ารหัส MD5 เกิดขึ้น"); - ขั้นสูง: การเข้ารหัสและการถอดรหัส
Java ใช้คลาสการเข้ารหัสและการถอดรหัส MD5 พร้อมคลาสทดสอบดูรายละเอียดรหัส
คลาสการเข้ารหัสและการถอดรหัส MD5 - Mymd5util รหัสมีดังนี้
แพ็คเกจ com.zyg.security.md5; นำเข้า java.io.unsupportencodingexception; นำเข้า Java.security.messagedigest; นำเข้า Java.security.nosuchalgorithmexception; นำเข้า Java.security hex_nums_str = "0123456789abcdef"; ส่วนตัวคงที่ทั้งหมดเป็นจำนวนเต็ม salt_length = 12; / ** * แปลงสตริง hex เป็น byte array * @param hex * @return * / public Static byte [] hexstringTobyte (hex hex) {int len = (hex.length () / 2); ไบต์ [] result = byte ใหม่ [len]; ถ่าน [] hexchars = hex.toChararray (); สำหรับ (int i = 0; i <len; i ++) {int pos = i * 2; ผลลัพธ์ [i] = (ไบต์) (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 ()); } return hexstring.toString (); } /** * ตรวจสอบว่ารหัสผ่านถูกกฎหมาย * @param รหัสผ่าน * @param passwordindb * @return * @throws nosuchalgorithmexception * @throws unsupportencodingingexception * /public boolean patternted /string string ARRAY BYTE [] PWDINDB = hexStringTobyte (รหัสผ่าน); // ประกาศตัวแปรเกลือไบต์ [] เกลือ = ไบต์ใหม่ [salt_length]; // แยกเกลือออกจากอาร์เรย์ไบต์ที่บันทึกไว้ในฐานข้อมูล System.ArrayCopy (PWDINDB, 0, เกลือ, 0, SALT_LENGTH); // สร้าง Message Digest Object MESAGEDIGEST MD = MESEGATEGEST.GETINSTANCE ("MD5"); // หยุดข้อมูลเกลือชั่วคราวลงใน Message Digest Object md.update (เกลือ); // ส่งข้อมูลรหัสผ่านไปยัง Message Digest Object md.update (password.getBytes ("UTF-8")); // สร้างการย่อยข้อความของรหัสผ่านอินพุตไบต์ [] digest = md.digest (); // ประกาศตัวแปรที่บันทึกการย่อยข้อความของรหัสผ่านในฐานข้อมูลไบต์ [] digestindb = ไบต์ใหม่ [pwdindb.length - salt_length]; // รับการย่อยข้อความของรหัสผ่านในฐานข้อมูล System.ArrayCopy (PWDINDB, SALT_LENGTH, DIGESTINDB, 0, DigESTINDB.Length); // เปรียบเทียบว่าการย่อยข้อความที่สร้างขึ้นตามรหัสผ่านอินพุตนั้นเหมือนกับการย่อยข้อความในฐานข้อมูลถ้า (Array.equals (Digest, DigeStindB)) {// รหัสผ่านส่งคืนรหัสผ่านการจับคู่ข้อความอย่างถูกต้อง } else {// รหัสผ่านที่ไม่ถูกต้องส่งคืนรหัสผ่านข้อความไม่ตรงกันส่งคืนเท็จ; }} /** * รับรหัสผ่าน hexadecimal ที่เข้ารหัส * @param รหัสผ่าน * @return * @throws nosuchalgorithmexception * @throws unsupportencodingexception * /สตริงคงที่ getencryptedpwd (สตริงรหัสผ่าน) ไบต์ [] pwd = null; // ตัวสร้างหมายเลขสุ่ม Securerandom Random = new Securerandom (); // ประกาศตัวแปรเกลืออาเรย์ไบต์ [] เกลือ = ไบต์ใหม่ [salt_length]; // ใส่หมายเลขสุ่มลงในตัวแปรเกลือแบบสุ่ม NEXTBYTES (เกลือ); // ประกาศข้อความ Digest Object MESAGEDIGEST MD = NULL; // สร้างข้อความ Digest MD = MessageGeSt.getInstance ("MD5"); // หยุดข้อมูลเกลือชั่วคราวลงใน Message Digest Object md.update (เกลือ); // ส่งข้อมูลของรหัสผ่านไปยัง Message Digest Object md.update (password.getBytes ("UTF-8")); // รับอาร์เรย์ไบต์ของ BYTE DIGEST BYTE [] DIGEST = MD.Digest (); // เนื่องจากเกลือจะถูกเก็บไว้ในอาร์เรย์ไบต์ของรหัสผ่านเพิ่มความยาวไบต์ของเกลือ pwd = ไบต์ใหม่ [digest.length + salt_length]; // คัดลอกไบต์ของเกลือไปยัง 12 ไบต์แรกของอาร์เรย์ไบต์รหัสผ่านที่สร้างขึ้นเพื่อให้เกลือออกเมื่อตรวจสอบระบบรหัสผ่าน arraycopy (เกลือ, 0, pwd, 0, salt_length); // คัดลอกการย่อยข้อความไปยังไบต์ในอาร์เรย์รหัสผ่านที่เข้ารหัสรหัสผ่านเริ่มต้นจากระบบไบต์ 13th.arrayCopy (Digest, 0, PWD, salt_length, digest.length); // แปลงรูปแบบรหัสผ่านที่เข้ารหัสรหัสผ่านเป็นรูปแบบรหัสผ่าน hexadecimal String รหัสผ่านคืน BytetoHexstring (PWD); -คลาสทดสอบ - ไคลเอนต์รหัสมีดังนี้:
แพ็คเกจ com.zyg.security.md5; นำเข้า java.io.unsupportencodingexception; นำเข้า Java.security.nosuchalgorithmexception; นำเข้า java.util.hashmap; นำเข้า Java.util.map; ลูกค้าระดับสาธารณะ โมฆะคงที่สาธารณะหลัก (สตริง [] args) {string username = "zyg"; สตริงรหัสผ่าน = "123"; registeruser (ชื่อผู้ใช้รหัสผ่าน); ชื่อผู้ใช้ = "Changong"; รหัสผ่าน = "456"; registeruser (ชื่อผู้ใช้รหัสผ่าน); String logginUserId = "zyg"; สตริง pwd = "1232"; ลอง {ถ้า (loginValid (logginuserId, pwd)) {system.out.println ("ยินดีต้อนรับสู่การเข้าสู่ระบบ !!!"); } else {system.out.println ("ข้อผิดพลาดรหัสผ่านโปรดกลับเข้ามาอีกครั้ง !!!"); }} catch (nosuchalgorithmexception e) {// toDo บล็อก catch ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } catch (unsupportencodingexception e) {// toDo บล็อก catch ที่สร้างโดยอัตโนมัติ E.PrintStackTrace (); }} / ** * ผู้ใช้ที่ลงทะเบียน * * @param ชื่อผู้ใช้ * @param รหัสผ่าน * / public static void registeruser (ชื่อผู้ใช้สตริง, รหัสผ่านสตริง) {สตริง EncryptedPwd = null; ลอง {ENCRYPTEDPWD = MYMD5UTIL.GETENCRYPTEDPWD (รหัสผ่าน); users.put (ชื่อผู้ใช้, EncryptedPwd); } catch (nosuchalgorithmexception e) {// toDo บล็อก catch ที่สร้างโดยอัตโนมัติ E.PrintStackTrace (); } catch (unsupportencodingexception e) {// toDo บล็อก catch ที่สร้างโดยอัตโนมัติ E.PrintStackTrace (); }} / ** * การตรวจสอบการเข้าสู่ระบบ * * @param ชื่อผู้ใช้ * @param รหัสผ่าน * @return * @throws unsupportencodingexception * @throws nosuchalgorithmexception * / public boolean loginValid (String) users.get (ชื่อผู้ใช้); if (null! = pwdindb) {// ผู้ใช้นี้มีอยู่ส่งกลับ mymd5util.validpassword (รหัสผ่าน, pwdindb); } else {system.out.println ("ผู้ใช้รายนี้ไม่มีอยู่จริง!"); กลับเท็จ; -PS: นี่คือเครื่องมือเข้ารหัส 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