คลาส MessageGeSest
คลาส MessageDigest ให้แอปพลิเคชันที่มีฟังก์ชั่นของอัลกอริทึมข้อมูลย่อยเช่นอัลกอริทึม MD5 หรือ SHA ข้อมูลย่อยเป็นฟังก์ชันแฮชทางเดียวที่ปลอดภัยที่ได้รับข้อมูลขนาดและเอาต์พุตใด ๆ ค่าแฮชที่มีความยาวคงที่
วัตถุที่ส่งข้อความเริ่มต้นจะเริ่มต้น วัตถุนี้ประมวลผลข้อมูลโดยใช้วิธีการอัปเดต () คุณสามารถเรียกวิธีการรีเซ็ต () ได้ตลอดเวลาเพื่อรีเซ็ตบทสรุป เมื่อข้อมูลทั้งหมดที่จำเป็นต้องได้รับการปรับปรุงได้รับการปรับปรุงวิธีการ Digest () อย่างใดอย่างหนึ่งควรถูกเรียกให้ทำการคำนวณแฮชให้เสร็จสมบูรณ์
วิธีการย่อยสามารถเรียกได้เพียงครั้งเดียวสำหรับข้อมูลการอัปเดตจำนวนหนึ่งที่กำหนด หลังจากเรียกว่า digest วัตถุที่ส่งข้อความจะถูกรีเซ็ตเป็นสถานะเริ่มต้น
ภาพประกอบ:
ในเว็บไซต์เพื่อปกป้องข้อมูลความเป็นส่วนตัวเช่นชื่อผู้ใช้และรหัสผ่านของสมาชิกเว็บไซต์เราเข้ารหัสโดยตรงใน MD5 หรือวิธีอื่น ๆ เมื่อลงทะเบียน แม้แต่ผู้ดูแลระบบฐานข้อมูลก็ไม่สามารถดูรหัสผ่านของสมาชิกและข้อมูลอื่น ๆ ได้ เอฟเฟกต์รหัสผ่านในฐานข้อมูลเช่น: 8E830882F03B2CB84D1A657F346DD41A เอฟเฟกต์
เนื่องจากอัลกอริทึม MD5 นั้นกลับไม่ได้จึงถูกใช้อย่างกว้างขวางโดยเว็บไซต์หลายแห่ง
สามวิธีการเข้ารหัสที่ใช้กันทั่วไป
วิธีที่ 1: ใช้ตัวดำเนินการบิตเพื่อแปลงข้อมูลที่เข้ารหัสเป็น hexadecimal วิธี 2: ใช้วิธีการจัดรูปแบบเพื่อแปลงข้อมูลที่เข้ารหัสเป็น hexadecimal (แนะนำ)
วิธีที่ 3: ใช้อัลกอริทึมเพื่อแปลงข้อมูลที่เข้ารหัสเป็น hexadecimal
นำเข้า Java.security.MessageDigest; นำเข้า Java.security.nosuchalgorithmexception;/*** ใช้คลาส MessageGestest ที่มาพร้อมกับ Java* @author Xiaokui*/คลาสสาธารณะ Digest นั้นยาวกว่า MD5 Digest (1BYTE = 8 บิต 32 บิตเทียบเท่ากับความยาว 4BYTES, 8 อักขระมากกว่า MD5 หลังจากการแปลงเป็น Hexadecimal) * สำหรับการโจมตีที่ถูกบังคับ MD5 เป็นการดำเนินการตามลำดับของ 2128 และ SHA-1 เป็นการดำเนินการตามลำดับ 2160 * ความยากลำบากสำหรับสองข้อความที่มีการย่อยเดียวกัน: MD5 เป็นการดำเนินการ 264 เป็นการดำเนินการตามลำดับขนาดและ SHA-1 เป็นการดำเนินการตามลำดับ 280 เป็นการดำเนินการตามลำดับ * ดังนั้น SHA-1 จึงมีพลังมากขึ้นต่อการโจมตีที่ถูกบังคับ อย่างไรก็ตามเนื่องจาก SHA-1 มีขั้นตอนรอบมากกว่า MD5 (80:64) และแคชที่จะประมวลผลมีขนาดใหญ่กว่า (160 บิต: 128 บิต), SHA-1 ทำงานช้ากว่า MD5 * * @param ต้นทางสตริงที่จำเป็นต้องเข้ารหัส * @param hashtype ประเภทการเข้ารหัส (md5 และ sha) * @return */สตริงคงที่สาธารณะ gethash (สตริงแหล่งที่มา, สตริง hashtype) {// ตัวละครที่ใช้ในการแปลงไบต์เป็น hexdigits [] = {0 ' '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; ลอง {messageGigest md = messageDigest.getInstance (hashtype); md.update (source.getBytes (); md.digest (); // ได้รับ ciphertext เพื่อทำการคำนวณแฮชให้เสร็จสมบูรณ์และสร้างถ่านจำนวนเต็มยาว 128 บิต [] = ถ่านใหม่ [16 * 2]; // ถ้าแต่ละไบต์แสดงใน hexadecimal ให้ใช้ตัวละครสองตัว Byte เป็น hexadecimal ตัวละคร byte byte0 = encryptstr [i]; // ใช้ i-th byte str [k ++] = hexdigits [byte0 >>> 4 & 0xf]; // ใช้การแปลงตัวเลขของ 4 บิต 0xf]; // ใช้การแปลงตัวเลขของ 4 บิตล่างในไบต์} ส่งคืนสตริงใหม่ (str); // แปลงผลลัพธ์หลังจากการแปลงเป็นสตริง} catch (nosuchalgorithmexception e) {e.printstacktrace (); * @return */สตริงคงที่สาธารณะ gethash2 (แหล่งที่มาของสตริง, สตริงแฮชเทอร์) {StringBuilder sb = สตริงใหม่ (); messageGeSest md5; ลอง {md5 = messagedigest.getInstance (hashType); md5.UpDate (แหล่งที่มา {sb.append (string.format ("%02x", b)); // ทศนิยมถึง hexadecimal, x หมายถึงเอาท์พุทใน hexadecimal, 02 หมายถึงมีน้อยกว่าสองหลักก่อนที่จะส่งออก 0} return sb.toString (); null;}/** @param สตริงต้นทางที่จำเป็นต้องเข้ารหัส* @param hashtype ประเภทการเข้ารหัส (md5 และ sha)* @return*/สตริงคงที่สาธารณะ gethash3 (สตริงแหล่งที่มา, สตริง hashtype) {// ตัวละครที่ใช้ในการแปลง Bytes เป็น hexdigits '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; stringbuilder sb = new Stringbuilder (); md5.digest (); สำหรับ (int i = 0; i <encryptstr.length; i ++) {int iret = encryptstr [i]; ถ้า (iret <0) {iret += 256;} int id1 = iret / 16; int id2 = iret % 16; sb.toString ();} catch (nosuchalgorithmexception e) {e.printstacktrace ();} return null;} โมฆะสาธารณะคงที่สาธารณะ (สตริง [] args) {system.out.println (gethash ("Xiaokui", "md5"); "/n");system.out.println(getHash2("xiaokui", "md5")); system.out.println (gethash2 ("xiaokui", "sha") + "); "md5")); system.out.println (gethash3 ("xiaokui", "sha") + "/n");}}ผลลัพธ์ผลลัพธ์
8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB7138 8E83082F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB713898745F91 8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F444AAB74
เราพบว่าทั้งสามวิธีทำเอฟเฟกต์เดียวกันและความยาว SHA คือ 8 อักขระ (32 บิต) มากกว่า MD5
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับตัวอย่างรหัสของคลาสการเข้ารหัสคลาส MessageGeSest ที่มาพร้อมกับ Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น