หลายครั้งจำเป็นต้องมีการเข้ารหัสแบบถาวรสำหรับการเข้ารหัสลับและการเข้ารหัสในเวลานี้ใช้ MD5 เมื่อใช้การเข้ารหัสแบบสมมาตรจะใช้วิธีการ DES
นำเข้า Java.io.ioexception; นำเข้า Sun.misc.basedecoder; "; สตริงคงสุดท้ายส่วนตัว md =" md "; คีย์สตริงคงสุดท้ายส่วนตัว =" opeddsaeaddadbcabf "; / ** * md อัลกอริทึมการเข้ารหัส * @param data * @return * / public Static String mdencrypt (ข้อมูลสตริง) { สตริงผลลัพธ์ = null; ResultsTring; xff) <x) {bf.append ("t"); ถึงคีย์ค่า * @param data * @param คีย์คีย์การเข้ารหัสคีย์อาร์เรย์ไบต์ * @return * @throws Exception */ สตริงคงที่สาธารณะ desencrypt (ข้อมูลสตริง, คีย์สตริง) โยนข้อยกเว้น {if (key == null) {key = key; } byte [] bt = encrypt (data.getBytes (), key.getBytes ()); PARAM DATA * @พารามิเตอร์คีย์คีย์การเข้ารหัสไบต์อาร์เรย์ * @return * @throws ioexception * @throws Exception */ สตริงคงที่สาธารณะ desdecrypt (สตริงข้อมูล, คีย์สตริง) พ่นตอน ioexc, ข้อยกเว้น {if (data == null) {return null } if (key == null) {key = key; ); ส่งคืนสตริงใหม่ (BT); ] d ata, byte [] คีย์) โยนข้อยกเว้น {// สร้างแหล่งที่มาสุ่มที่เชื่อถือได้ Securerandom Sr = ใหม่ securerandom (); สร้างโรงงานที่สำคัญจากนั้นใช้เพื่อแปลง Deskeyspec ไปที่ SecretKey SecretKeyFactory KeyFactory = SecretKeyFactory.GetInstance (DES); CIPHER.GETINSTANCE (DES); ข้อมูลพารามิเตอร์ * @param คีย์คีย์การเข้ารหัสไบต์อาร์เรย์ * @return * @throws Exception */ ส่วนตัวคงที่ไบต์ [] DECRYPT (BYTE [] ข้อมูล, ไบต์ [] คีย์) โยนข้อยกเว้น {// สร้างแหล่งที่มาสุ่ม ใหม่ SEC URERANDOM (); DES); SecretKey SecureKey = KeyFactory.GenerAtesecret (DKS); );ด้านล่างนี้ฉันจะแนะนำส่วนหนึ่งของรหัสเพื่อใช้คลาสการเข้ารหัสและการถอดรหัส MD5 ใน Java
Java ใช้คลาสการเข้ารหัสและการถอดรหัส MD5 พร้อมคลาสทดสอบดูรายละเอียดรหัส
คลาสการเข้ารหัสและการถอดรหัส MD5 - MYMD5UTIL รหัสมีดังนี้:
com.zyg.security.md5; สตริงสุดท้าย hex_nums_str = "0123456789abcdef"; = (hex.length () / 2); pos = i * 2; แปลงอาร์เรย์ไบต์ที่ระบุเป็นสตริง hex * @param b * @return */ สตริงคงที่สาธารณะ bytetohexstring (byte [] b) {StringBuffer hexstring = new StringBuffer (); i ++) {String hex = Integer.tohexstring (b [i] & 0xff); ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::::::::::::::::::::: หัวเครื่อง * @param passwordindb * @return * @throws nosuchalgorithmexception * @throws unsupportencodexception */public boolean public boolean validPassword (รหัสผ่านสตริง, สตริงรหัสผ่าน) HexStringTobyte (รหัสผ่าน indb); ); ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::: กระทาน : ข้อมูลเกลือถูกส่งผ่านไปยัง Message Digest Object md.update (เกลือ); ของไบต์รหัสผ่านอินพุต [] digest = md.digest (); การย่อยข้อความของรหัสผ่านในฐานข้อมูล System.ArrayCopy (PWDINDB, SALT_LENGTH, DIGESTINDB, 0, DigESTINDB.Length); arrays.equals (Digest, DigeStindB)) {// รหัสผ่านส่งคืนข้อความการจับคู่รหัสผ่านอย่างถูกต้อง} อื่น {// รหัสผ่านไม่ถูกต้องและส่งคืนรหัสผ่านที่ไม่ตรงกัน รหัสผ่าน Hexadecimal * @param รหัสผ่าน * @return * @throws nosuchalgorithm ข้อยกเว้น * @throws unsupportencodingexception * /สตริงคงที่สาธารณะ getencryptedpwd (รหัสผ่านสตริง) โยน nosuchalgorithmexception เครื่องกำเนิดไฟฟ้าแบบสุ่ม Securerandom Random = New Securerandom (); Object MessageDigest MD = NULL; Object md.update (password.getBytes ("UTF-8")); รหัสผ่านเพิ่มความยาวไบต์ของเกลือ pwd = ไบต์ใหม่ [digest.length + salt_length]; , 0, pwd, 0, salt_length); รูปแบบรหัสผ่านที่เข้ารหัสรหัสผ่านเพื่อส่งคืนรหัสผ่าน BytetoHexString (PWD);}}คลาสทดสอบ - ไคลเอนต์รหัสมีดังนี้:
com.zyg.security.md5; ; ); ou t. / TODO บล็อก catch ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace ();}} / ** * ผู้ใช้ที่ลงทะเบียน * * @param ชื่อผู้ใช้ * @param รหัสผ่าน * / โมฆะสาธารณะคงที่สาธารณะ (ชื่อผู้ใช้สตริง ลอง {Encryptedpwd = mymd5util / สิ่งที่ต้องทำโดยอัตโนมัติที่สร้างขึ้นโดยอัตโนมัติ E.PrintStackTrace ();}} / ** * การตรวจสอบการเข้าสู่ระบบ * * @param ชื่อผู้ใช้ * @param รหัสผ่าน * @return * @throws unsupportencodingexception * @throws nos uchalgorithmexception * ชื่อผู้ใช้, รหัสผ่านสตริง) โยน nosuchalgorithmexception, unsupportencodingexception {String pwdindb = (String) ผู้ใช้. get (ชื่อผู้ใช้); System.out.println ("ไม่มีผู้ใช้นี้! - - "); return false;}}}