มีสองประโยคที่พูดแบบนี้:
1) อัลกอริทึมและโครงสร้างข้อมูลเป็นส่วนสำคัญของการเขียนโปรแกรม
2) การเขียนโปรแกรมเป็นอัลกอริทึมและโครงสร้างข้อมูลและอัลกอริทึมและโครงสร้างข้อมูลเป็นวิญญาณของการเขียนโปรแกรม
โปรดทราบว่านี่ไม่ใช่สิ่งที่ฉันพูดมันถูกสรุปโดยโปรแกรมเมอร์นับไม่ถ้วน มันมีอัลกอริทึมการเข้ารหัสแบบสมมาตรสามอัลกอริทึม: DES, 3DES และ AES และเต็มไปด้วยข้อมูลที่เป็นประโยชน์
1. อัลกอริทึมรหัสผ่านแบบสมมาตร
อัลกอริทึมการเข้ารหัสแบบสมมาตรเป็นอัลกอริทึมการเข้ารหัสที่ใช้กันอย่างแพร่หลายและใช้บ่อยที่สุดในปัจจุบัน ไม่เพียง แต่ใช้ในอุตสาหกรรมซอฟต์แวร์เท่านั้น แต่ยังได้รับความนิยมในอุตสาหกรรมฮาร์ดแวร์ โครงสร้างพื้นฐานทุกชนิดจะให้ความสำคัญกับอัลกอริทึมการเข้ารหัสแบบสมมาตรเมื่อใดก็ตามที่พวกเขาเกี่ยวข้องกับความต้องการด้านความปลอดภัย
คีย์การเข้ารหัสและคีย์ถอดรหัสของอัลกอริทึมการเข้ารหัสแบบสมมาตรนั้นเหมือนกัน
(1) รูปแบบการสื่อสารเข้ารหัสและถอดรหัส
(2) คุณสมบัติ: อัลกอริทึมแบบเปิด, ปริมาตรการคำนวณขนาดเล็ก, ความเร็วการเข้ารหัสที่รวดเร็ว, ประสิทธิภาพการเข้ารหัสสูง
(3) ความอ่อนแอ: ทั้งสองฝ่ายใช้คีย์เดียวกันและไม่รับประกันความปลอดภัย
รหัสผ่านแบบสมมาตรมีสองประเภท: รหัสผ่านสตรีมและรหัสผ่านแพ็คเก็ต แต่ตอนนี้รหัสผ่านบล็อกถูกใช้โดยทั่วไป:
(4) บล็อกโหมดการทำงานรหัสผ่าน
1) ECB: CipherBook อิเล็กทรอนิกส์ (ที่ใช้กันมากที่สุดการเข้ารหัสแต่ละครั้งจะสร้างแพ็กเก็ต Ciphertext อิสระและจะไม่ส่งผลกระทบต่อแพ็กเก็ต CipherText อื่น ๆ นั่นคือข้อความธรรมดาเดียวกันถูกสร้างขึ้นหลังจากการเข้ารหัส)
2) CBC: ลิงก์ Ciphertext (ใช้กันทั่วไปก่อนการเข้ารหัสแบบธรรมดาคุณต้องดำเนินการ XOR ด้วย ciphertext ก่อนหน้านั่นคือ ciphertexts ที่แตกต่างกันถูกสร้างขึ้นหลังจากการเข้ารหัสแบบธรรมดาเดียวกัน)
นอกเหนือจากโหมดการทำงานที่ใช้กันทั่วไปทั้งสองนี้แล้วยังมี:
3) CFB: คำติชมรหัสผ่าน
4) OFB: ข้อเสนอแนะผลลัพธ์
5) CTR: เคาน์เตอร์
โหมดการทำงานทั้งห้านี้ส่วนใหญ่ใช้โดยอัลกอริทึมในการเข้ารหัสเมื่อทำการคำนวณที่ได้มา
6. วิธีเติมรหัสผ่านบล็อก
1) nopadding: ไม่เติม
2) PKCS5Padding:
3) ISO10126PADDING:
7. รหัสผ่านสมมาตรที่ใช้กันทั่วไป:
1) DES (มาตรฐานการเข้ารหัสข้อมูลมาตรฐานการเข้ารหัสข้อมูล)
2) 3DES (Triple Des, Desede, Triple DES การเข้ารหัสอัลกอริทึม)
3) AES (มาตรฐานการเข้ารหัสขั้นสูงมาตรฐานการเข้ารหัสข้อมูลขั้นสูงอัลกอริทึม AES สามารถต้านทานอัลกอริทึมการโจมตีได้อย่างมีประสิทธิภาพกับ DES)
ก่อนอื่นมาดูการเปรียบเทียบอัลกอริทึมทั้งสามนี้อย่างง่าย ๆ :
| อัลกอริทึม | ความยาวคีย์ | ความยาวคีย์เริ่มต้น | โหมดการทำงาน | วิธีการเติม |
|---|---|---|---|---|
| des | 56 | 56 | ECB, CBC, PCBC, CTR, CTS, CFB, CFB8-CFB128, OFB, OFB8-ofB128 | Nopadding, PKCS5Padding, ISO10126Padding |
| 3DES | 112, 168 | 168 | ECB, CBC, PCBC, CTR, CTS, CFB, CFB8-CFB128, OFB, OFB8-ofB128 | Nopadding, PKCS5Padding, ISO10126Padding |
| AES | 128, 192, 256 | 128 | ECB, CBC, PCBC, CTR, CTS, CFB, CFB8-CFB128, OFB, OFB8-ofB128 | Nopadding, PKCS5Padding, ISO10126Padding |
มาดูวิธีการใช้อัลกอริทึมสามแบบของ DES/3DES/AES เพื่อใช้การเข้ารหัสแบบสมมาตร:
2. อัลกอริทึม DES
1.DES: มาตรฐานการเข้ารหัสข้อมูลอัลกอริทึมทั่วไปในเขตข้อมูลอัลกอริทึมการเข้ารหัสแบบสมมาตร
2. คุณสมบัติ: กุญแจสั้น (56 บิต) วงจรชีวิตสั้น (หลีกเลี่ยงการแคร็ก)
3. การใช้งาน Java
1) สร้างคีย์
keygenerator keygen = keygenerator.getInstance ("des"); // key generator keygen.init (56); // เริ่มต้นเครื่องกำเนิดคีย์ SecretKey = keygen.generateKey (); // สร้างคีย์ไบต์ [] key = secretKey.getEncoded ();2) การเข้ารหัส
SecretKey SecretKey = ใหม่ SecretKeySPEC (คีย์, "des"); // กู้คืนรหัสสำคัญรหัส = cipher.getInstance ("des"); // cipher เสร็จสิ้นการเข้ารหัสหรือถอดรหัสระดับการทำงาน cipher.init (cipher.encrypt_mode, SecretKey);3) การถอดรหัส
SecretKey = ใหม่ SecretKeySpec (คีย์, "DES"); // กู้คืนรหัสสำคัญ CIPHER = CIPHER.GETINSTANCE ("DES"); // CIPHER เสร็จสิ้นการเข้ารหัส ข้อมูลเราสามารถพบว่าเราเพิ่งตั้งค่าโหมดที่แตกต่างกันสำหรับการเข้ารหัสและถอดรหัส
อัลกอริทึม 3.3DES
1.3DES: เพิ่มความยาวที่สำคัญเป็น 112 หรือ 168 บิตและปรับปรุงความปลอดภัยโดยเพิ่มจำนวนการวนซ้ำ
2. ข้อเสีย: ความเร็วในการประมวลผลช้าเวลาการคำนวณคีย์ยาวและประสิทธิภาพการเข้ารหัสต่ำ
3. การใช้งาน Java
1) สร้างคีย์
Keygenerator keygen = keygenerator.getInstance ("desede"); // key generator keygen.init (168);2) การเข้ารหัส 3DES
SecretKey = ใหม่ SecretKeySPEC (คีย์, "desede"); // กู้คืนรหัสสำคัญ Cipher = Cipher.GetInstance ("desede"); // cipher เสร็จสิ้นการเข้ารหัสหรือการถอดรหัสของ CIPHER.INIT (CIPHER.ENCHETEN ข้อมูล3) การถอดรหัส 3DES
SecretKey = ใหม่ SecretKeySPEC (คีย์, "desede"); // กู้คืนรหัสสำคัญ cipher = cipher.getinstance ("desede"); // cipher เสร็จสิ้นการเข้ารหัสหรือการถอดรหัสของ cipher.init (cipher.decrypt_mode); ข้อมูล PTS4. อัลกอริทึม AES (แนะนำ)
1.AES: มาตรฐานการเข้ารหัสข้อมูลขั้นสูงสามารถต้านทานการโจมตีที่รู้จักทั้งหมดกับอัลกอริทึม DES ได้อย่างมีประสิทธิภาพ
2. คุณสมบัติ: เวลาการจัดตั้งคีย์สั้นความไวที่ดีข้อกำหนดของหน่วยความจำต่ำและความปลอดภัยสูง
3. การใช้งาน Java
1) สร้างคีย์
Keygenerator Keygen = Keygenerator.getInstance ("AES"); // Key Generator Keygen.init (128);2) การเข้ารหัส AES
SecretKey = ใหม่ SecretKeySPEC (คีย์ "AES"); // การกู้คืนรหัส CIPHER CIPHER = CIPHER.GETINSTANCE ("AES"); ข้อมูล PTS3) การถอดรหัส AES
SecretKey = ใหม่ SecretKeySPEC (คีย์ "AES"); // กู้คืนรหัสสำคัญ CIPHER = CIPHER.GETINSTANCE ("AES"); // CIPHER เสร็จสิ้นการเข้ารหัสหรือการถอดรหัสของ CIPHER.INIT ข้อมูล PTSเพื่อความสะดวกในการใช้งานฉันได้เขียนคลาสเครื่องมือสำหรับอัลกอริทึม DES/3DES/AES, ที่อยู่: ที่อยู่ดาวน์โหลด (คลาสเครื่องมือ DES/3DES/AES ใหม่)
ณ จุดนี้อัลกอริทึมทั้งสามของ DES/3DES/AES ทั้งหมดจะทำเพื่อใช้การเข้ารหัสแบบสมมาตร ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น