บทความนี้อธิบายถึงฟังก์ชั่นการเข้ารหัสและการถอดรหัสที่ใช้โดย Java ตามอัลกอริทึมการเข้ารหัส DES Symmetric แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
หมวดหมู่ที่เกี่ยวข้องกับการเข้ารหัส DES:
Securerandom ได้รับการสืบทอดมาจากคลาส java.util.random
ตัวสร้างสามประเภทของคลาสนี้มีตัวอย่างต่อไปนี้คือ:
SecurerAndom () สร้างตัวสร้างหมายเลขสุ่มที่ปลอดภัย (RNG) ที่ใช้อัลกอริทึมหมายเลขสุ่มเริ่มต้น
Securerandom (BYTE [] SEED) สร้างตัวสร้างตัวเลขสุ่มที่ปลอดภัย (RNG) ที่ใช้อัลกอริทึมหมายเลขสุ่มเริ่มต้น
Deskeyspec ใช้เพื่อสร้างเนื้อหาคีย์ของคีย์โดยใช้คีย์ดั้งเดิม
Deskeyspec มีสองตัวสร้าง:
ปุ่ม Deskeyspec (byte []) สร้างวัตถุ Deskeyspec โดยใช้ 8 ไบต์แรกในคีย์เป็นเนื้อหาคีย์ของคีย์ DES
ปุ่ม Deskeyspec (byte [], int offset) สร้างวัตถุ Deskeyspec โดยใช้ 8 ไบต์แรกในคีย์ที่เริ่มต้นด้วยและมีออฟเซ็ตเป็นเนื้อหาสำคัญของคีย์ Des-Eede
SecretKeyFactory โรงงานสำคัญที่ใช้ในการแปลงคีย์ (คีย์การเข้ารหัส OPIC ของคีย์ประเภท) เป็นข้อกำหนดคีย์ (การแสดงโปร่งใสของวัสดุคีย์พื้นฐาน) และในทางกลับกัน Secret Key Factory ดำเนินการเฉพาะปุ่ม Secret (Symmetric)
SecretKey Object, Secret Key Object สร้างคีย์ลับโดยการเรียกใช้วิธีการสร้าง Secret (Deskeyspec Desktop Space) ของโรงงานคีย์ลับ
คลาส Cipher มีฟังก์ชั่นรหัสผ่านสำหรับการเข้ารหัสและถอดรหัสและรับอินสแตนซ์โดยเรียก GetInstance ของ Cipher ("DES")
วัตถุ Cipher เรียกใช้เมธอด init () เพื่อเริ่มต้นวัตถุ พารามิเตอร์เฉพาะของวิธีการ init () ถูกกำหนดตามสถานการณ์เฉพาะรวมถึงค่าคงที่ที่เข้ารหัสและถอดรหัส
ในที่สุดวิธีการโทรหา Dofinal () ของ Call Cipher สำหรับการเข้ารหัสและการถอดรหัส
ที่นี่ฉันอยากจะถามคำถามคุณ ไม่ว่าจะเป็นประเภทแรกของการเข้ารหัสโดยใช้ Base64Encoder หรือประเภทที่สองของ org.apache.commons.codec.binary.base64 การเข้ารหัสเมื่อแปลงสตริงเป็นไบต์และไบต์เป็นสตริง, UTF-8/GBK และการเข้ารหัสอื่น ๆ มันถอดรหัสหรือไม่?
1. ใช้ sun.misc.base64decoder และ base64encoder สำหรับการถอดรหัสและการเข้ารหัส
แพ็คเกจ com.soufun.com; นำเข้า java.io.ioexception; นำเข้า java.security.nosuchalgorithmexception; นำเข้า Java.security.securerandom นำเข้า java.util.date นำเข้า Javax.crypto.cipher; javax.crypto.spec.deskeyspec; // นำเข้าการเข้ารหัส 64 บิตของ Sun นำเข้า Sun.misc.base64decoder; นำเข้า Sun.misc.base64encoder;/** *@ผู้แต่ง whd * *encoder แม้ว่าคุณจะนำเข้าแพ็คเกจ Sun.misc ในเวลานี้คุณสามารถลบแพ็คเกจ JRE ของคุณและนำเข้าอีกครั้ง */คลาสสาธารณะ desutil {// กำหนดวิธีการเข้ารหัสส่วนตัวสตริงคงสุดท้ายสุดท้าย des = "des"; สตริงคงสุดท้ายส่วนตัว UTF8 = "GBK"; คีย์ factory secretKeyFactory คงที่ = null; คงที่ {ลอง {keyFactory = secretKeyFactory.getInstance ("des"); } catch (nosuchalgorithmexception e) {// toDo บล็อก catch ที่สร้างโดยอัตโนมัติ E.PrintStackTrace (); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {long start = new date (). getTime (); String data = "การทดสอบการเข้ารหัส aaades"; // หมายเหตุ: ในระหว่างกระบวนการเข้ารหัสและการถอดรหัส DES ความยาวคีย์จะต้องเป็นหลายของ 8. สตริงคีย์ = "qazwsxed"; System.err.println (Encrypt (data, key)); System.err.println (DECRYPT (เข้ารหัส (ข้อมูล, คีย์), คีย์)); Long End = วันที่ใหม่ (). getTime (); System.out.println (end-begin); } / ** * คำอธิบายเข้ารหัสตามค่าคีย์ * @param data * @param คีย์คีย์การเข้ารหัสคีย์อาร์เรย์ไบต์ * @return * @throws Exception * / String String String สาธารณะ (ข้อมูลสตริง, คีย์สตริง) โดยทั่วไปแล้วคีย์ลับคือตัวอักษรหรือตัวเลขโดยไม่ระบุการเข้ารหัส แต่ที่ระบุสามารถเป็นไบต์ [] bt = เข้ารหัส (data.getBytes (UTF8), key.getBytes (UTF8)); // หมายเหตุ: เมื่อเข้ารหัสและถอดรหัสให้ใช้ Base64Encoder () ของ Sun's Base64Encoder () สำหรับการเข้ารหัสและถอดรหัสมิฉะนั้นจะมีรหัสที่อ่านไม่ออก//ฉันได้ดูหลายกรณีออนไลน์ แต่ไม่มีการเข้ารหัสและถอดรหัสและไม่มีปัญหารหัสที่อ่านไม่ออก ฉันมีรหัสที่อ่านไม่ออกที่นี่ดังนั้นฉันจึงใช้ base64encoder () สำหรับการเข้ารหัสและถอดรหัสสตริง strs = ใหม่ base64encoder (). ENCODE (BT); กลับมา Strs; } / ** * คำอธิบาย decrypt ตามค่าคีย์ * @param data * @param คีย์คีย์การเข้ารหัสคีย์อาร์เรย์ไบต์ * @return * @throws ioexception * @throws Exception * / การถอดรหัสสตริงแบบคงที่สาธารณะ // หมายเหตุ: เมื่อเข้ารหัสและถอดรหัสให้ใช้ base64enencoder () ของ Sun's Base64Encoder () สำหรับการเข้ารหัสและถอดรหัสมิฉะนั้นจะมีการถอดรหัส base64decoder decoder = ใหม่ base64decoder (); ไบต์ [] buf = decoder.decodeBuffer (ข้อมูล); ไบต์ [] bt = decrypt (buf, key.getBytes ()); ส่งคืนสตริงใหม่ (BT, UTF8); } / ** * คำอธิบายเข้ารหัสตามค่าคีย์ * @param data * @param ปุ่มเข้ารหัสคีย์คีย์อาร์เรย์ * @return * @throws Exception * / ไบต์คงที่ส่วนตัว [] เข้ารหัส (ไบต์ [] ข้อมูลไบต์ [] คีย์) โยนข้อยกเว้น {// // สร้างวัตถุ Deskeyspec จากข้อมูลคีย์ดั้งเดิมนั่นคือเนื้อหาคีย์ของคีย์ที่สร้างคีย์ Deskeyspec DKS = New Deskeyspec (คีย์); // โรงงานคีย์ใช้ในการแปลงคีย์ (คีย์การเข้ารหัส OPIC ของคีย์ประเภท) เป็นข้อกำหนดของคีย์ (การแสดงโปร่งใสของวัสดุคีย์พื้นฐาน) และในทางกลับกัน Secret Key Factory ดำเนินการเฉพาะปุ่ม Secret (Symmetric) // ใช้โหมด Singleton แทนที่นี่ // secretKeyFactory keyFactory = SecretKeyFactory.getInstance (DES); // สร้างวัตถุ SecretKey (คีย์) ตามข้อกำหนดของคีย์ที่มีให้ (วัสดุสำคัญ) SecretKey SecureKey = KeyFactory.GenerAtesecret (DKS); // วัตถุ Cipher จริง ๆ แล้วเสร็จสิ้นการดำเนินการเข้ารหัสและคลาสนี้มีฟังก์ชั่นรหัสผ่านสำหรับการเข้ารหัสและการถอดรหัส Cipher Cipher = Cipher.GetInstance (DES); // เริ่มต้นรหัสนี้ด้วยคีย์และแหล่งสุ่ม ENCRYPT_MODE ใช้เพื่อเริ่มต้นการเข้ารหัสเป็นค่าคงที่สำหรับโหมดการเข้ารหัส cipher.init (cipher.encrypt_mode, SecureKey, SR); // การดำเนินการอย่างเป็นทางการของการดำเนินการเข้ารหัสส่งคืน cipher.dofinal (ข้อมูล); } / ** * คำอธิบาย decrypt ตามค่าคีย์ * @param data * @param คีย์คีย์คีย์คีย์อาร์เรย์ * @return * @throws ยกเว้น * / ไบต์คงที่ส่วนตัว [] decrypt (ไบต์ [] ข้อมูลไบต์ [] คีย์) โยนข้อยกเว้น {// // สร้างวัตถุ Deskeyspec จากข้อมูลคีย์ดั้งเดิมนั่นคือเนื้อหาคีย์ของคีย์ที่สร้างคีย์ Deskeyspec DKS = New Deskeyspec (คีย์); // โรงงานคีย์ใช้ในการแปลงคีย์ (คีย์การเข้ารหัส OPIC ของคีย์ประเภท) เป็นข้อกำหนดของคีย์ (การแสดงโปร่งใสของวัสดุคีย์พื้นฐาน) และในทางกลับกัน Secret Key Factory ดำเนินการเฉพาะปุ่ม Secret (Symmetric) // ใช้โหมด Singleton แทนที่นี่ // secretKeyFactory keyFactory = SecretKeyFactory.getInstance (DES); // สร้างวัตถุ SecretKey (คีย์) ตามข้อกำหนดของคีย์ที่มีให้ (วัสดุสำคัญ) SecretKey SecureKey = KeyFactory.GenerAtesecret (DKS); // คลาส Cipher มีฟังก์ชั่นรหัสผ่านสำหรับการเข้ารหัสและการถอดรหัส Cipher Cipher = Cipher.GetInstance (DES); // decrypt_mode ใช้เพื่อเริ่มต้นการเข้ารหัสเป็นค่าคงที่ในโหมดถอดรหัส cipher.init (cipher.decrypt_mode, SecureKey, SR); // การดำเนินการถอดรหัสอย่างเป็นทางการส่งคืน cipher.dofinal (ข้อมูล); -2. ใช้ org.apache.commons.codec.binary.base64 เพื่อถอดรหัสและเข้ารหัส
แพ็คเกจ com.soufun.com; นำเข้า java.io.ioexception; นำเข้า java.security.nosuchalgorithmexception; นำเข้า Java.security.securerandom นำเข้า java.util.date นำเข้า Javax.crypto.cipher; javax.crypto.spec.deskeyspec; นำเข้า org.apache.commons.codec.binary.base64;/** *@ผู้แต่ง whd * */คลาสสาธารณะ Desutil {// กำหนดวิธีการเข้ารหัส สตริงคงสุดท้ายส่วนตัว UTF8 = "GBK"; คีย์ factory secretKeyFactory คงที่ = null; คงที่ {ลอง {keyFactory = secretKeyFactory.getInstance ("des"); } catch (nosuchalgorithmexception e) {// toDo บล็อก catch ที่สร้างโดยอัตโนมัติ E.PrintStackTrace (); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {long start = new date (). getTime (); String data = "การทดสอบการเข้ารหัส aaades"; // หมายเหตุ: ในระหว่างการเข้ารหัสและการถอดรหัสความยาวคีย์จะต้องทวีคูณเป็น 8. สตริงคีย์ = "qazwsxed"; System.err.println (Encrypt (data, key)); System.err.println (DECRYPT (เข้ารหัส (ข้อมูล, คีย์), คีย์)); Long End = วันที่ใหม่ (). getTime (); System.out.println (end-begin); } / ** * คำอธิบายเข้ารหัสตามค่าคีย์ * @param data * @param คีย์คีย์การเข้ารหัสคีย์อาร์เรย์ไบต์ * @return * @throws Exception * / String String String สาธารณะ (ข้อมูลสตริง, คีย์สตริง) โดยทั่วไปคีย์คือตัวอักษรหรือตัวเลขโดยไม่ระบุการเข้ารหัส แต่ที่ระบุสามารถเป็นไบต์ [] bt = เข้ารหัส (data.getBytes (UTF8), key.getBytes ()); // คนแรกใช้ sun.misc.base64encoder; มันถูกเข้ารหัส แต่มีการกล่าวว่าการใช้ org.apache.commons.codec.binary.base64 ดีกว่าดังนั้นลองใช้สตริง strs = base64.encodebase64string (BT); กลับมา Strs; } / ** * คำอธิบาย decrypt ตามค่าคีย์ * @param data * @param คีย์คีย์การเข้ารหัสคีย์อาร์เรย์ไบต์ * @return * @throws ioexception * @throws Exception * / การถอดรหัสสตริงแบบคงที่สาธารณะ // ใช้ org.apache.commons.codec.binary.base64 เพื่อถอดรหัสไบต์ [] buf = base64.decodeBase64 (ข้อมูล); ไบต์ [] bt = decrypt (buf, key.getBytes ()); ส่งคืนสตริงใหม่ (BT, UTF8); } / ** * คำอธิบายเข้ารหัสตามค่าคีย์ * @param data * @param คีย์คีย์คีย์คีย์อาร์เรย์ * @return * @throws Exception * / ไบต์คงที่ส่วนตัว [] เข้ารหัส (ไบต์ [] ข้อมูลไบต์ [] คีย์) โยนข้อยกเว้น {// // สร้างวัตถุ Deskeyspec จากข้อมูลคีย์ดั้งเดิมนั่นคือเนื้อหาคีย์ของคีย์ที่สร้างคีย์ Deskeyspec DKS = New Deskeyspec (คีย์); // โรงงานคีย์ใช้ในการแปลงคีย์ (คีย์การเข้ารหัส OPIC ของคีย์ประเภท) เป็นข้อกำหนดของคีย์ (การแสดงโปร่งใสของวัสดุคีย์พื้นฐาน) และในทางกลับกัน Secret Key Factory ดำเนินการเฉพาะปุ่ม Secret (Symmetric) // ใช้โหมด Singleton แทนที่นี่ // secretKeyFactory keyFactory = SecretKeyFactory.getInstance (DES); // สร้างวัตถุ SecretKey (คีย์) ตามข้อกำหนดของคีย์ที่มีให้ (วัสดุสำคัญ) SecretKey SecureKey = KeyFactory.GenerAtesecret (DKS); // วัตถุ Cipher จริง ๆ แล้วเสร็จสิ้นการดำเนินการเข้ารหัสและคลาสนี้มีฟังก์ชั่นรหัสผ่านสำหรับการเข้ารหัสและการถอดรหัส Cipher Cipher = Cipher.GetInstance (DES); // เริ่มต้นรหัสนี้ด้วยคีย์และแหล่งสุ่ม ENCRYPT_MODE ใช้เพื่อเริ่มต้นการเข้ารหัสเป็นค่าคงที่สำหรับโหมดการเข้ารหัส cipher.init (cipher.encrypt_mode, SecureKey, SR); // การดำเนินการอย่างเป็นทางการของการดำเนินการเข้ารหัสส่งคืน cipher.dofinal (ข้อมูล); } / ** * คำอธิบาย decrypt ตามค่าคีย์ * @param data * @param คีย์คีย์คีย์คีย์อาร์เรย์ * @return * @throws ยกเว้น * / ไบต์คงที่ส่วนตัว [] decrypt (ไบต์ [] ข้อมูลไบต์ [] คีย์) โยนข้อยกเว้น {// // สร้างวัตถุ Deskeyspec จากข้อมูลคีย์ดั้งเดิมนั่นคือเนื้อหาคีย์ของคีย์ที่สร้างคีย์ Deskeyspec DKS = New Deskeyspec (คีย์); // โรงงานคีย์ใช้ในการแปลงคีย์ (คีย์การเข้ารหัส OPIC ของคีย์ประเภท) เป็นข้อกำหนดของคีย์ (การแสดงโปร่งใสของวัสดุคีย์พื้นฐาน) และในทางกลับกัน Secret Key Factory ดำเนินการเฉพาะปุ่ม Secret (Symmetric) // ใช้โหมด Singleton แทนที่นี่ // secretKeyFactory keyFactory = SecretKeyFactory.getInstance (DES); // สร้างวัตถุ SecretKey (คีย์) ตามข้อกำหนดของคีย์ที่มีให้ (วัสดุสำคัญ) SecretKey SecureKey = KeyFactory.GenerAtesecret (DKS); // คลาส Cipher มีฟังก์ชั่นรหัสผ่านสำหรับการเข้ารหัสและการถอดรหัส Cipher Cipher = Cipher.GetInstance (DES); // decrypt_mode ใช้เพื่อเริ่มต้นการเข้ารหัสเป็นค่าคงที่ในโหมดถอดรหัส cipher.init (cipher.decrypt_mode, SecureKey, SR); // การดำเนินการถอดรหัสอย่างเป็นทางการส่งคืน cipher.dofinal (ข้อมูล); -ดาวน์โหลดที่อยู่ของแพ็คเกจที่ใช้ใน 1 และ 2:
ดาวน์โหลด: sun.misc.base64decoder
ดาวน์โหลด: การเข้ารหัส Base64 ของ Apache, Decoder
3. ไม่ใช้การเข้ารหัสแพ็คเกจถอดรหัส
แพ็คเกจ com.soufun.com; นำเข้า java.io.ioexception; นำเข้า java.security.nosuchalgorithmexception; นำเข้า java.util.date นำเข้า java.util.hashmap; นำเข้า Java.util.map; นำเข้า Javax.crypto.cipher javax.crypto.secretkeyfactory; นำเข้า Javax.crypto.spec.deskeyspec; นำเข้า Javax.crypto.spec.ivparameterspec;/** *@ผู้แต่ง whd * */ชั้นเรียนสาธารณะ // cipher ของ "อัลกอริทึม/รูปแบบ/การเติม" cipher ของสตริงสุดท้าย cipher = "des/cbc/pkcs5padding"; คงที่ {ลอง {// รับคีย์โครงการลับ secretKeyFactory = secretKeyFactory.getInstance ("des"); } catch (nosuchalgorithmexception e) {e.printstacktrace (); }} // กำหนดค่าคงที่, การเข้ารหัสรูปแบบส่วนตัวสตริงสุดท้ายคงที่ UTF8 = "GBK"; /** คอนเทนเนอร์สำหรับแคชวัตถุ*/ แคชคลาสบทคัดย่อแบบคงที่ {แผนที่สุดท้ายส่วนตัว InnerCache = new HashMap (); วัตถุบทคัดย่อที่ได้รับการป้องกัน createValue (คีย์วัตถุ) โยนข้อยกเว้น; วัตถุสาธารณะรับ (คีย์วัตถุ) โยนข้อยกเว้น {ค่าวัตถุ; ซิงโครไนซ์ (innerCache) {value = innerCache.get (คีย์); if (value == null) {value = new CreationPlaceHolder (); innerCache.put (คีย์, ค่า); }} if (อินสแตนซ์ค่าของการสร้างสถานที่) {ซิงโครไนซ์ (มูลค่า) {CreationPlaceHolder Progress = (CreationPlaceHolder) มูลค่า; if (progress.value == null) {progress.value = createValue (คีย์); ซิงโครไนซ์ (innerCache) {innerCache.put (คีย์, progress.value); }} return progress.value; }} ค่าส่งคืน; } การสร้างชั้นเรียนสุดท้ายแบบคงที่ {ค่าวัตถุ; }} / * * hex-> str & str-> hex * / public Static byte [] stringtoHex (สตริง ss) {// การแปลงสตริงเรา byte digest [] = byte ใหม่ [ss.length () / 2]; สำหรับ (int i = 0; i <digest.length; i ++) {string bytestring = ss.substring (2 * i, 2 * i+2); int bytevalue = integer.parseint (bytestring, 16); digest [i] = (ไบต์) bytevalue; } return digest; } สตริงคงที่สาธารณะ hextoString (byte b []) {StringBuffer hexString = new StringBuffer (); สำหรับ (int i = 0; i <b.length; i ++) {string plaintext = integer.tohexstring (0xff & b [i]); if (plaintext.length () <2) {hexstring.append ("0"); } hexstring.append (plaintext); } return hexstring.toString (); } ไบต์คงที่ส่วนตัว [] _convertKeyIv (ข้อความสตริง) พ่น IOException {ถ้า (text.length () == 8) {return text.getBytes (UTF8); } if (text.startswith ("0x") && text.length () == 32) {byte [] result = byte ใหม่ [8]; สำหรับ (int i = 0; i <text.length (); i+= 2) {ถ้า (text.charat (i ++) == '0' && text.charat (i ++) == 'x') {ลอง {ผลลัพธ์ [i / 4] = } catch (Exception e) {โยน iOexception ใหม่ ("txt '" + ข้อความ + "' ไม่ถูกต้อง!"); }}} ผลการส่งคืน; } โยน iOexception ใหม่ ("txt '" + ข้อความ + "' ไม่ถูกต้อง!"); } /** แคชของ SecretKey & IVParameterspec* / แคชแบบคงที่ส่วนตัว SecretKeySpecs = ใหม่แคช () {วัตถุที่ได้รับการป้องกัน createValue (คีย์วัตถุ) โยนข้อยกเว้น {SecretKey SecretKeyObj = null; ลอง {SecretKeyObj = SecretKeyFactory.GenerAtesecret (Deskeyspec ใหม่ (_ConvertKeyIv ((String) คีย์))); } catch (exception e) {e.printstacktrace (); } return secretKeyObj; - แคชแบบคงที่ส่วนตัว ivparamspecs = new cache () {วัตถุที่ได้รับการป้องกัน createValue (คีย์วัตถุ) โยนข้อยกเว้น {ivparameterspec ivobj = null; IVOBJ = ใหม่ ivParameterspec (_convertKeyIv ((สตริง) คีย์)); กลับ ivobj; - /** การเข้ารหัสและถอดรหัส*/ การเข้ารหัสสตริงคงที่สาธารณะ (ข้อความสตริง, สตริง Authkey, สตริง Authiv) {SecretKey SecretKeyObj = null; ivParameterspec ivobj = null; ลอง {SecretKeyObj = (SecretKey) SecretKeySpecs.get (AuthKey); ivobj = (ivparameterspec) ivparamspecs.get (authiv); } catch (exception e) {e.printstacktrace (); } byte [] data = null; ลอง {data = text.getBytes (UTF8); } catch (exception e) {e.printstacktrace (); } byte [] authToken = null; ลอง {AuthToken = ENCRYPT (ข้อมูล, SecretKeyObj, IVOBJ); } catch (exception e) {e.printstacktrace (); } return hextoString (AuthToken); } ไบต์คงที่สาธารณะ [] เข้ารหัส (ไบต์ [] ข้อมูล, SecretKey SecretKey, IVParameterspec IV) โยนข้อยกเว้น {cipher cipher = cipher.getInstance (Cipher); cipher.init (cipher.encrypt_mode, SecretKey, iv); ส่งคืน cipher.dofinal (ข้อมูล); } การถอดรหัสสตริงคงที่สาธารณะ (สตริง hexString, สตริง Authkey, String Authiv) โยนข้อยกเว้น {SecretKey SecretKeyObj = NULL; ivParameterspec ivobj = null; ลอง {SecretKeyObj = (SecretKey) SecretKeySpecs.get (AuthKey); ivobj = (ivparameterspec) ivparamspecs.get (authiv); } catch (exception e) {e.printstacktrace (); } String text = decrypt (hexstring, secretkeyobj, ivobj); ส่งคืนข้อความ; } การถอดรหัสสตริงแบบคงที่สาธารณะ (ข้อความสตริง, SecretKey SecretKey, ivParameterspec iv) โยนข้อยกเว้น {byte [] data = stringtohex (ข้อความ); ส่งคืนการถอดรหัส (ข้อมูล, SecretKey, iv); } decrypt สตริงคงที่สาธารณะ (BYTE [] ข้อมูล, SecretKey SecretKey, IVParameterspec IV) โยนข้อยกเว้น {Cipher Cipher = cipher.getInstance (Cipher); cipher.init (cipher.decrypt_mode, Secretkey, iv); ไบต์ [] retbyte = cipher.dofinal (ข้อมูล); ส่งคืนสตริงใหม่ (retbyte); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {long start = date ใหม่ (). getTime (); String Authkey = "W8F3K9C2"; String Authiv = "W8F3K9C2"; String text = "การทดสอบการเข้ารหัส aaades"; // 140CB412BA03869F // 140CB412BA03869F // เข้ารหัสสตริงข้อความต้นฉบับ EncryptEdText = Encrypt (Text, Authkey, AuthiviV); System.out.println ("ENCRYPTEDTEXT:" + EncryptEdText); // กู้คืน ciphertext string plaintext = decrypt (EncryptedText, Authkey, Authiv); System.out.println ("plaintext:" + plaintext); // 2A329740CE15F549BE64190B183A5BE2 ปลายยาว = วันที่ใหม่ (). getTime (); System.out.println (end-begin); -PS: เพื่อนที่สนใจในการเข้ารหัสและถอดรหัสสามารถอ้างถึงเครื่องมือออนไลน์ของเว็บไซต์นี้:
การตรวจจับความปลอดภัยของรหัสผ่านออนไลน์:
http://tools.vevb.com/password/my_password_safe
เครื่องกำเนิดรหัสผ่านที่มีความแข็งแรงสูง:
http://tools.vevb.com/password/createstrongpassword
Thunder, Express และ Tornado URL เครื่องมือการเข้ารหัส/ถอดรหัส:
http://tools.vevb.com/password/urlrethunder
เครื่องมือเข้ารหัสอัลกอริทึมแฮช/แฮชออนไลน์:
http://tools.vevb.com/password/hash_encrypt
MD5 ออนไลน์/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160 เครื่องมือเข้ารหัส:
http://tools.vevb.com/password/hash_md5_sha
ออนไลน์ sha1/sha224/sha256/sha384/sha512 เครื่องมือเข้ารหัส:
http://tools.vevb.com/password/sha_encode
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน