sha1
แพ็คเกจ com.stone.security; นำเข้า Java.io.ByTearrayInputStream; นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า Java.io.FileOutputStream; นำเข้า java.security.digestinputstream; นำเข้า Java.security.DigestOutputStream; นำเข้า Java.security.MessageDigest; นำเข้า Java.util.Arrays; นำเข้า Javax.crypto.mac; นำเข้า Javax.crypto.secretkey; นำเข้า Javax.crypto.secretkeyFactory; นำเข้า Javax.crypto.spec.pbekeyspec; ระดับสาธารณะ sha {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {encodebymac ("จีน op ... &*() ... & 802134 ... "); ENCODEBYSHA ("China Op ... &*() ... & 802134 ... "); Shafile (); } / ** * สรุปข้อความโดยใช้อัลกอริทึม Mac * @param data * @throws Exception * / โมฆะสาธารณะคงที่ encodebymac (ข้อมูลสตริง) โยนข้อยกเว้น {// keygenerator keygen = keygenerator.getInstance ("hmacsha1"); // secretkey key = keygen.generateKey (); // คีย์นี้สร้างขึ้นในแต่ละครั้งแตกต่างกัน, pbekeyspec keyspec = ใหม่ pbekeyspec ("randomkey^(^&*^%$". tochararray ()); secretkeyfactory keyfactory = secretkeyfactory.getInstance ("pbewithmd5anddes") รหัสการรับรองความถูกต้อง "(MAC) อัลกอริทึม * MAC ให้วิธีการตรวจสอบความสมบูรณ์ของข้อมูลที่ส่งหรือเก็บไว้ในสื่อที่ไม่น่าเชื่อถือตามคีย์ลับ * โดยทั่วไปแล้วรหัสการตรวจสอบข้อความจะใช้ระหว่างผู้เข้าร่วมสองคน ฟังก์ชั่นแฮช (เช่น MD5 หรือ SHA-1) */ Mac = Mac.getInstance ("HMACSHA1"); mac.init (กุญแจ); ไบต์ [] dest = mac.dofinal (data.getBytes ()); System.out.println (dest.length); System.out.println ("MAC Summary:" + Arrays.toString (dest)); } / *** การเข้ารหัส sha1 ใช้ข้อความ Digest MessageGeSt เพื่อจัดการ* @throws Exception* / String String สาธารณะ ENCODEBYSHA (String Str) โยนข้อยกเว้น {MessageDigest sha1; sha1 = messageDigest.getInstance ("sha1"); // สามต่อไปนี้ไม่มี // sha1 = messageGeSt.getInstance ("sha256"); // sha1 = messageGeSt.getInstance ("sha384"); // sha1 = messageDigest.getInstance ("sha512"); sha1.update (str.getBytes ()); // อัปเดตข้อมูลสรุปแรก [] digest = sha1.digest (); // การคำนวณแฮชเสร็จสมบูรณ์โดยการดำเนินการขั้นสุดท้ายเช่นการขยาย หลังจากวิธีการนี้เรียกว่าสรุปจะถูกรีเซ็ต / * * ใช้อาร์เรย์ไบต์ที่ระบุเพื่อทำการอัปเดตขั้นสุดท้ายของบทสรุปและทำการคำนวณสรุปให้เสร็จสมบูรณ์ * นั่นคือวิธีนี้การอัพเดท (อินพุต) ครั้งแรก * ส่งผ่านอาร์เรย์อินพุตไปยังวิธีการอัปเดตจากนั้นเรียก Digest () */ // byte [] digest = sha1.digest (str.getBytes ()); สตริง hex = tohex (digest); System.out.println ("สรุป sha1:" + hex); hex กลับมา; } / *** สรุปข้อมูลไฟล์* @throws Exception* / โมฆะสาธารณะคงที่ shafile () โยนข้อยกเว้น {messageGeSest messageGeStest = messageGeSt.getInstance ("sha1"); DigeStOutputStream DOS = ใหม่ DigeStOutputStream (ใหม่ fileOutputStream (ไฟล์ใหม่ ("abc.txt")), messageDigest); dos.write ("คนจีน ... & ()) f*(214) ผู้ดูแลระบบ*". getBytes ()); dos.close (); ไบต์ [] digest = messageGeSt.digest (); System.out.println ("เขียนไฟล์โดยใช้สตรีมสรุปของไฟล์คือ:" + tohex (digest)); DigestInputStream dis = new DigestInputStream (ใหม่ FileInputStream (ไฟล์ใหม่ ("abc.txt")), messageDigest); ไบต์ [] buf = ไบต์ใหม่ [100]; int len; ในขณะที่ ((len = dis.read (buf))! = -1) {system.out.println ("ข้อมูลที่อ่านคือ:" + สตริงใหม่ (buf, 0, len)); } dis.close (); ไบต์ [] digest2 = messageGeSt.digest (); // เมื่ออ่านสตรีมไฟล์จะเสร็จสิ้นและ digest จะเหมือนกับเมื่อมีการเขียน system.out.println ("ใช้สตรีมเพื่ออ่านไฟล์การย่อยของไฟล์คือ:" + tohex (digest2)); } / ** * sha1 digest คือ hexadecimal * @param digest * @return * / สตริงคงที่ส่วนตัว tohex (ไบต์ [] digest) {StringBuilder sb = new StringBuilder (); int len = digest.length; string out = null; สำหรับ (int i = 0; i <len; i ++) {// out = integer.tohexstring (0xff & digest [i]+0xabcdef); // เพิ่มเกลือใด ๆ = integer.tohexstring (0xff & digest [i]); // วิธีดั้งเดิมถ้า (out.length () == 1) {sb.append ("0"); // ถ้าคุณเพิ่ม 0 ด้านหน้า 1 บิต} sb.append (ออก); } return sb.toString (); -
MD5
MD5 (อัลกอริทึมการย่อยข้อความ 5) รุ่นที่ห้าของอัลกอริทึมการย่อยข้อความ Message Digest เป็นอัลกอริทึม: ไม่ว่าข้อมูลต้นฉบับจะนานแค่ไหนผลลัพธ์ของการย่อยข้อความมีความยาวคงที่ มันเป็นอัลกอริทึมที่กลับไม่ได้ การเปลี่ยนแปลงในบิตบิตของข้อมูลดั้งเดิมจะทำให้เกิดความแตกต่างอย่างมากในผลลัพธ์ของการย่อยข้อความและความน่าจะเป็นของการคำนวณข้อมูลดั้งเดิมตามผลลัพธ์ต่ำมาก
การย่อยข้อความอาจถือได้ว่าเป็นลายนิ้วมือของข้อมูลต้นฉบับ ลายนิ้วมือที่แตกต่างกันจะทำให้ข้อมูลต้นฉบับแตกต่างกัน
แพ็คเกจ com.stone.security; นำเข้า Java.io.ByTearrayInputStream; นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า Java.io.FileOutputStream; นำเข้า java.security.digestinputstream; นำเข้า Java.security.DigestOutputStream; นำเข้า Java.security.MessageDigest; นำเข้า Java.util.Arrays; นำเข้า Javax.crypto.mac; นำเข้า Javax.crypto.secretkey; นำเข้า Javax.crypto.secretkeyFactory; นำเข้า Javax.crypto.spec.pbekeyspec; คลาสสาธารณะ MD5 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {encodebymac ("จีน op ... &*() ... & 802134 ... "); ENCODEBYMD5 ("China Op ... &*() ... & 802134 ... "); md5file (); } / ** * สรุปข้อความโดยใช้อัลกอริทึม Mac * @param data * @throws Exception * / โมฆะสาธารณะคงที่ encodebymac (ข้อมูลสตริง) โยนข้อยกเว้น {// keygenerator keygen = keygenerator.getInstance ("HMACMD5"); // secretkey key = keygen.generateKey (); // คีย์นี้สร้างขึ้นในแต่ละครั้งแตกต่างกัน, pbekeyspec keyspec = ใหม่ pbekeyspec ("randomkey^(^&*^%$". tochararray ()); secretkeyfactory keyfactory = secretkeyfactory.getInstance ("pbewithmd5anddes") รหัสการรับรองความถูกต้อง "(MAC) อัลกอริทึม * MAC ให้วิธีการตรวจสอบความสมบูรณ์ของข้อมูลที่ส่งหรือเก็บไว้ในสื่อที่ไม่น่าเชื่อถือตามคีย์ลับ * โดยทั่วไปแล้วรหัสการตรวจสอบข้อความจะใช้ระหว่างผู้เข้าร่วมสองคน ฟังก์ชั่นแฮช (เช่น MD5 หรือ SHA-1) */ Mac = Mac.getInstance ("HMACMD5"); } / *** การเข้ารหัส MD5 ใช้ข้อความ Digest MessageGeTest เพื่อจัดการ* @throws Exception* / String สาธารณะคงที่ ENCODEBYMD5 (String Str) โยนข้อยกเว้น {MessageDigest MD5; md5 = messageGeSt.getInstance ("MD5"); md5.update (str.getBytes ()); // อัปเดตข้อมูลสรุปแรก [] digest = md5.digest (); // การคำนวณแฮชเสร็จสมบูรณ์โดยการดำเนินการขั้นสุดท้ายเช่นการขยาย หลังจากวิธีการนี้เรียกว่าสรุปจะถูกรีเซ็ต / * * ใช้อาร์เรย์ไบต์ที่ระบุเพื่อทำการอัปเดตขั้นสุดท้ายของบทสรุปและทำการคำนวณสรุปให้เสร็จสมบูรณ์ * นั่นคือวิธีนี้การอัพเดท (อินพุต) ครั้งแรก * ส่งผ่านอาร์เรย์อินพุตไปยังวิธีการอัปเดตจากนั้นเรียก Digest () */ // byte [] digest = md5.digest (str.getBytes ()); สตริง hex = tohex (digest); System.out.println ("MD5 สรุป:" + hex); hex กลับมา; } / *** สรุปข้อมูลไฟล์* @throws Exception* / โมฆะสาธารณะคงที่ md5file () พ่นข้อยกเว้น {messageGeSest messageGeStest = messageGeSt.getInstance ("MD5"); DigeStOutputStream DOS = ใหม่ DigeStOutputStream (ใหม่ fileOutputStream (ไฟล์ใหม่ ("abc.txt")), messageDigest); dos.write ("คนจีน ... & ()) f*(214) ผู้ดูแลระบบ*". getBytes ()); dos.close (); ไบต์ [] digest = messageGeSt.digest (); System.out.println ("เขียนไฟล์โดยใช้สตรีมสรุปของไฟล์คือ:" + tohex (digest)); DigestInputStream dis = new DigestInputStream (ใหม่ FileInputStream (ไฟล์ใหม่ ("abc.txt")), messageDigest); ไบต์ [] buf = ไบต์ใหม่ [100]; int len; ในขณะที่ ((len = dis.read (buf))! = -1) {system.out.println ("ข้อมูลที่อ่านคือ:" + สตริงใหม่ (buf, 0, len)); } dis.close (); ไบต์ [] digest2 = messageGeSt.digest (); // เมื่ออ่านสตรีมไฟล์จะเสร็จสิ้นและ digest จะเหมือนกับเมื่อมีการเขียน system.out.println ("ใช้สตรีมเพื่ออ่านไฟล์การย่อยของไฟล์คือ:" + tohex (digest2)); } / ** * md5 digest คือ hexadecimal * @param digest * @return * / สตริงคงที่ส่วนตัว tohex (byte [] digest) {StringBuilder sb = new StringBuilder (); int len = digest.length; string out = null; สำหรับ (int i = 0; i <len; i ++) {// out = integer.tohexstring (0xff & digest [i]+0xabcdef); // เพิ่มเกลือใด ๆ = integer.tohexstring (0xff & digest [i]); // วิธีดั้งเดิมถ้า (out.length () == 1) {sb.append ("0"); // ถ้าคุณเพิ่ม 0 ด้านหน้า 1 บิต} sb.append (ออก); } return sb.toString (); -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