บทความนี้อธิบายการวิเคราะห์การใช้งาน Java ของอัลกอริทึมการเข้ารหัสและถอดรหัส Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
การแนะนำ:
อัลกอริทึมการเข้ารหัสข้อมูล (DEA) เป็นอัลกอริทึมการเข้ารหัสแบบสมมาตรที่น่าจะเป็นระบบคีย์ที่ใช้กันอย่างแพร่หลายโดยเฉพาะอย่างยิ่งในการปกป้องความปลอดภัยของข้อมูลทางการเงิน DEA ที่พัฒนาแล้วเริ่มแรกถูกฝังอยู่ในฮาร์ดแวร์ โดยปกติแล้วเครื่องรับสัญญาณอัตโนมัติ (ATM) ใช้ DEA มันมาจากงานวิจัยของไอบีเอ็มซึ่งมีสิทธิในสิทธิบัตรเป็นเวลาหลายปี แต่หลังจากหมดอายุในปี 1983 มันอยู่ในขอบเขตสาธารณะและอนุญาตให้ใช้งานภายใต้เงื่อนไขบางประการโดยไม่มีค่าธรรมเนียมการใช้สิทธิบัตร รัฐบาลสหรัฐฯได้รับการรับรองอย่างเป็นทางการในปี 2520
การเกิดขึ้นของ DES DECIPHERS ที่ใช้งานได้หลังจากปี 1998 ประกาศอย่างสมบูรณ์ว่าอัลกอริทึม DES ไม่ปลอดภัยอีกต่อไป ในปี 1999 NIST ออกมาตรฐานใหม่โดยกำหนดว่าอัลกอริทึม DES สามารถใช้ในระบบเข้ารหัสแบบดั้งเดิมได้ แต่ไม่ได้ จำกัด การใช้อัลกอริทึม DESEDE อัลกอริทึม DES ของวันนี้กำลังเปิดตัวเวทีประวัติศาสตร์และอัลกอริทึม AES เรียกว่าการแทนที่
หลักการเข้ารหัส:
DES ใช้คีย์ 56 บิตพร้อมบิตพาริตี้ 8 บิตเพิ่มเติมเพื่อสร้างขนาดแพ็คเก็ต 64 บิตสูงสุด นี่คือรหัสผ่านบล็อกวนซ้ำโดยใช้เทคนิคที่เรียกว่า Feistel ซึ่งบล็อกข้อความที่เข้ารหัสแบ่งออกเป็นสองบล็อก ใช้คีย์ย่อยเพื่อใช้ฟังก์ชั่นลูปกับครึ่งหนึ่งจากนั้นดำเนินการ "พิเศษหรือ" กับอีกครึ่งหนึ่ง; จากนั้นเปลี่ยนสองครึ่งนี้และกระบวนการจะดำเนินต่อไป แต่ลูปสุดท้ายจะไม่ถูกเปลี่ยน DES ใช้ 16 รอบการดำเนินการขั้นพื้นฐานสี่ประการ: พิเศษหรือการเปลี่ยนแปลงการทดแทนและการดำเนินการกะ
การสนับสนุนของ JDK สำหรับอัลกอริทึม DES
ความยาวคีย์: 56 บิต
โหมดการทำงาน: ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 ถึง CFB128/OFB/OBF8 ถึง OFB128
วิธีการเติม: nopadding/pkcs5padding/iso10126padding/
อัลกอริทึมการเข้ารหัส Java และการถอดรหัสแบบสมมาตร
Desede เป็นอัลกอริทึมการเข้ารหัส Triple DES หรือที่เรียกว่า 3DES หรือ Triple Des ใช้คีย์ที่แตกต่างกันสาม (หรือสอง) เพื่อเข้ารหัสบล็อกข้อมูลสามครั้ง (หรือสอง) ของ DES (การเข้ารหัสครั้งเดียวเร็วกว่าการเข้ารหัสสามครั้งสามครั้ง) ความแข็งแกร่งของ Triple Des นั้นใกล้เคียงกับความแข็งแรงที่สำคัญของ 112 บิต ความปลอดภัยได้รับการปรับปรุงผ่านจำนวนการวนซ้ำ แต่ก็ทำให้เกิดปัญหาของประสิทธิภาพการเข้ารหัสต่ำ เนื่องจากประสิทธิภาพของอัลกอริทึม Desede อัลกอริทึม AES จึงเกิดขึ้น
จนถึงตอนนี้ยังไม่มีใครให้วิธีที่มีประสิทธิภาพในการโจมตี Triple des หากคุณค้นหากุญแจในพื้นที่คีย์ของมันเพราะพื้นที่มีขนาดใหญ่เกินไปนี่เป็นไปไม่ได้จริง หากใช้วิธีการโจมตีที่แตกต่างกันความซับซ้อนจะเพิ่มขึ้นแบบทวีคูณเมื่อเทียบกับ DES เดียว
Triple Des มีสี่รุ่น
รหัสเข้ารหัส Java สำหรับอัลกอริทึม DES
แพ็คเกจ com.favccxx.codelib; นำเข้า java.security.securerandom; นำเข้า Javax.crypto.cipher; นำเข้า Javax.crypto.secretkey; นำเข้า Javax.crypto.secretkeyfortory; Public Static Byte [] ENCRYPT (BYTE [] SRC, BYTE [] คีย์) โยนข้อยกเว้น {// อัลกอริทึม DES ต้องใช้แหล่งที่มาสุ่มที่เชื่อถือได้ // สร้างวัตถุ Deskeyspec จากข้อมูลคีย์ดั้งเดิม deskeyspec dks = ใหม่ deskeyspec (คีย์); // สร้างโรงงานสำคัญและใช้เพื่อแปลง Deskeyspec เป็นวัตถุ SecretKey SecretKeyFactory KeyFactory = SecretKeyFactory.GetInstance (DES); SecretKey SecureKey = KeyFactory.GenerAtesecret (DKS); // วัตถุ Cipher จริง ๆ แล้วเสร็จสิ้นการดำเนินการเข้ารหัส cipher cipher = cipher.getInstance (DES); // เริ่มต้นวัตถุ cipher cipher.init (cipher.encrypt_mode, SecureKey, SR); // การดำเนินการอย่างเป็นทางการของการดำเนินการเข้ารหัสส่งคืน cipher.dofinal (SRC); } / **** @param รหัสผ่านรหัสผ่าน* @param คีย์การเข้ารหัสสตริง* @return* / การเข้ารหัสสตริงคงสุดท้ายสุดท้าย (รหัสผ่านสตริง, คีย์สตริง) {ลอง {return byte2string (เข้ารหัส } catch (exception e) {} return null; } สตริงคงที่สาธารณะ byte2string (byte [] b) {string hs = ""; สตริง stmp = ""; สำหรับ (int n = 0; n <b.length; n ++) {stmp = (java.lang.integer.tohexstring (b [n] & 0xff)); if (stmp.length () == 1) hs = hs + "0" + stmp; อื่น ๆ hs = hs + stmp; } return hs.touppercase (); } โมฆะคงที่สาธารณะหลัก (String [] args) {String EncryptString = Encrypt ("คือ Zhang Sanfeng", "ทดสอบภาษาจีนและภาษาอังกฤษผสม @123654 {"); System.out.println (EncryptString); } // เอาท์พุท: B00542E93695F4CFCE34FC4393C2F4BF} การใช้งาน Java ของอัลกอริทึมการถอดรหัส DES
แพ็คเกจ com.favccxx.codelib; นำเข้า java.security.securerandom; นำเข้า Javax.crypto.cipher; นำเข้า Javax.crypto.secretkey; นำเข้า Javax.crypto.secretkeyfortory; "เดส"; / ** * * @param SRC แหล่งข้อมูล * คีย์คีย์ @param, ความยาวต้องเป็นทวีคูณของ 8 * @return * @throws ยกเว้น */ ไบต์สาธารณะคงที่ [] decrypt (byte [] src, byte [] คีย์) โยนข้อยกเว้น // สร้างวัตถุ Deskeyspec จากข้อมูลคีย์ดั้งเดิม deskeyspec dks = ใหม่ deskeyspec (คีย์); // สร้างโรงงานที่สำคัญจากนั้นใช้เพื่อแปลงวัตถุ Deskeyspec เป็นวัตถุ SecretKey SecretKeyFactory KeyFactory = SecretKeyFactory.GetInstance (DES); SecretKey SecureKey = KeyFactory.GenerAtesecret (DKS); // วัตถุ Cipher จริง ๆ แล้วเสร็จสิ้นการถอดรหัส Cipher Cipher = cipher.getInstance (DES); // เริ่มต้นวัตถุ cipher cipher.init (cipher.decrypt_mode, SecureKey, SR); // การดำเนินการอย่างเป็นทางการของการถอดรหัสการดำเนินการส่งคืน cipher.dofinal (SRC); } สาธารณะ decrypt สตริงคงสุดท้ายสุดท้าย (ข้อมูลสตริง, คีย์สตริง) {ลอง {ส่งคืนสตริงใหม่ (DECRYPT (String2Byte (data.getBytes ()), key.getBytes ())); } catch (exception e) {e.printstacktrace (); } return null; } ไบต์คงที่สาธารณะ [] String2Byte (byte [] b) {ถ้า ((b.length % 2)! = 0) โยน unlegalargumentException ใหม่ ("ความยาวไม่ได้แม้แต่"); ไบต์ [] b2 = ไบต์ใหม่ [b.length / 2]; สำหรับ (int n = 0; n <b.length; n += 2) {string item = สตริงใหม่ (b, n, 2); b2 [n / 2] = (ไบต์) จำนวนเต็ม PARSEINT (รายการ, 16); } return b2; } โมฆะคงที่สาธารณะหลัก (String [] args) {String desenCryptString = decrypt ("B00542E93695F4CFCE34FC4393C2F4BF", "ทดสอบจีนและอังกฤษผสม @123654"); System.out.println (DesencryptString); } // เอาท์พุท: คือ Zhang Sanfeng}ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับคุณ นี่คือทั้งหมดที่คุณจะแนะนำเนื้อหาการวิเคราะห์ของการใช้งาน Java ของการเข้ารหัส DES และอัลกอริทึมการถอดรหัส ฉันหวังว่าทุกคนจะติดตามเว็บไซต์ของเราต่อไป! หากคุณต้องการเรียนรู้ Java คุณสามารถติดตามเว็บไซต์นี้ต่อไปได้