มีการแนะนำรหัสการเข้ารหัสและการถอดรหัส AES แบบสมมาตรในรายละเอียดสำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
แพ็คเกจ Demo.Security; นำเข้า java.io.ioException; นำเข้า java.io.unsupportencodingexception; นำเข้า Java.security.invalidkeyException; นำเข้า Java.security.nosuchalgorithmexception; นำเข้า Java.security javax.crypto.badpaddingexception; นำเข้า Javax.crypto.cipher; นำเข้า Javax.crypto.illegalblockseexception; นำเข้า Javax.crypto.keyenerator; นำเข้า Javax.crypto.nosuchpadexception; javax.crypto.spec.secretkeyspec; นำเข้า sun.misc.base64decoder นำเข้า sun.misc.base64encoder;/** AES การเข้ารหัสสมมาตรและการถอดรหัส*/class symmetricencoder {/** 1 คีย์ * 4. สร้างและเริ่มต้นรหัสผ่าน * 5. การเข้ารหัสเนื้อหา * 6. ส่งคืนสตริง */สตริงคงที่สาธารณะ Aesencode (String encoderules, เนื้อหาสตริง) {ลอง {// 1 สร้างเครื่องกำเนิดคีย์ที่ระบุเป็นอัลกอริทึม AES และเป็น keygenerator keygen = keygenerator.getInstance ("AES"); // 2. เริ่มต้นเครื่องกำเนิดคีย์ตามกฎ Ecnoderules // สร้างแหล่งสุ่ม 128 บิตและตามคีย์จีเจนอาร์เรย์ที่ผ่านมา (128, ความปลอดภัยใหม่ (encoderules.getBytes ()); // 3. สร้างคีย์แบบสมมาตรแบบดั้งเดิม rectrekey original_key = keygen.generateKey (); // 4. รับอาร์เรย์ไบต์ของคีย์ symmetric byte [] raw = original_key.getencoded (); // 5. สร้างคีย์ AES จาก BYTE ARRAY SECTELKEY KEY = ใหม่ SecretKeySpec (RAW, "AES"); // 6. ตามอัลกอริทึมที่ระบุ AES Cryptor Cipher Cipher = Cipher.GetInstance ("AES"); // 7. เริ่มต้น cryptor พารามิเตอร์แรกคือการเข้ารหัส (ENCRYPT_MODE) หรือการถอดรหัสและการถอดรหัส (DECRYPT_MODE) และพารามิเตอร์ที่สองคือคีย์ที่ใช้ cipher.Init (cipher.Encrypt_mode, key); // 8. รับอาร์เรย์ไบต์ของเนื้อหาที่เข้ารหัส (จำเป็นต้องตั้งค่าเป็น UTF-8 ที่นี่) มิฉะนั้นหากมีภาษาจีนผสมและภาษาอังกฤษในเนื้อหามันจะถูกถอดรหัสลงในรหัสที่อ่านไม่ออก [] byte_encode = content.getBytes ("UTF-8"); // 9. ตามวิธีการเริ่มต้นของตัวเลข-การเข้ารหัส: เข้ารหัสข้อมูลไบต์ [] byte_aes = cipher.dofinal (byte_encode); // 10. แปลงข้อมูลที่เข้ารหัสเป็นสตริง // แพ็คเกจจะไม่พบใน Base64Encoder ที่นี่ // โซลูชัน: // ลบออกก่อนลบไลบรารีระบบ JRE ในเส้นทางการสร้างของโครงการจากนั้นเพิ่มไลบรารีระบบไลบรารี JRE ทุกอย่างเป็นไปด้วยดี String AES_ENCODE = สตริงใหม่ (ใหม่ BASE64ENCODER (). ENCODE (BYTE_AES)); // 11. ส่งคืนสตริงเพื่อส่งคืน AES_ENCODE; } catch (nosuchalgorithmexception e) {e.printstacktrace (); } catch (nosuchpaddingexception e) {e.printstacktrace (); } catch (InvalidKeyException E) {E.PrintStackTrace (); } catch (unlueLblocksizeException e) {e.printStackTrace (); } catch (badpaddingexception e) {e.printstacktrace (); } catch (unsupportencodingexception e) {e.printstacktrace (); } // หากมีข้อผิดพลาดใด ๆ ให้เพิ่ม null return null; } /** DECRYPT* กระบวนการถอดรหัส:* 1. ขั้นตอนการเข้ารหัสเดียวกัน 1-4* 2. ผกผันหมุนสตริงที่เข้ารหัสลงในไบต์ [] อาร์เรย์* 3. ถอดรหัสเนื้อหาที่เข้ารหัส* /สตริงคงที่สาธารณะ AESDNCODE สร้างเครื่องกำเนิดคีย์ระบุว่าเป็นอัลกอริทึม AES และไม่ใช่ตัวพิมพ์ใหญ่ Keygenerator Keygen = KeyGenerator.getInstance ("AES"); // 2. เริ่มต้นเครื่องกำเนิดคีย์ตามกฎ Ecnoderules // สร้างแหล่งสุ่ม 128 บิตและตามคีย์จีเจนอาร์เรย์ที่ผ่านมา (128, ความปลอดภัยใหม่ (encoderules.getBytes ()); // 3. สร้างคีย์แบบสมมาตรแบบดั้งเดิม rectrekey original_key = keygen.generateKey (); // 4. รับอาร์เรย์ไบต์ของคีย์ symmetric byte [] raw = original_key.getencoded (); // 5. สร้างคีย์ AES ตามอาร์เรย์ BYTE SecretKey Key = ใหม่ SecretKeySpec (RAW, "AES"); // 6. ตามอัลกอริธึมที่ระบุ AES การสร้างตัวเลขด้วยตนเอง, cipher cipher = cipher.getInstance ("AES"); // 7. เริ่มต้น Cipher, พารามิเตอร์แรกคือการเข้ารหัส (ENCRYPT_MODE) หรือ DECRYPT (DECRYPT_MODE) และพารามิเตอร์ที่สองคือคีย์ cipher.init (cipher.decrypt_mode, คีย์); // 8. ถอดรหัสเนื้อหาที่เข้ารหัสและเข้ารหัสลงในไบต์อาร์เรย์ไบต์ [] byte_content = ใหม่ base64decoder () DecodeBuffer (เนื้อหา); /** decrypt*/ byte [] byte_decode = cipher.dofinal (byte_content); String AES_DECODE = สตริงใหม่ (BYTE_DECODE, "UTF-8"); ส่งคืน aes_decode; } catch (nosuchalgorithmexception e) {e.printstacktrace (); } catch (nosuchpaddingexception e) {e.printstacktrace (); } catch (InvalidKeyException E) {E.PrintStackTrace (); } catch (ioexception e) {e.printstacktrace (); } catch (unlueLblocksizeException e) {e.printStackTrace (); } catch (badpaddingexception e) {e.printstacktrace (); } // หากมีข้อผิดพลาดใด ๆ ให้เพิ่ม null return null; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {symmetricencoder se = new symmetricencoder (); สแกนเนอร์สแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); /** การเข้ารหัส*/ system.out.println ("ใช้การเข้ารหัส AES สมมาตรโปรดป้อนกฎการเข้ารหัส"); String encoderules = scanner.next (); System.out.println ("โปรดป้อนเนื้อหาที่จะเข้ารหัส:"); สตริงเนื้อหา = scanner.next (); System.out.println ("ตามกฎอินพุต"+encoderules+"ciphertext ที่เข้ารหัสคือ:"+se.aesencode (encoderules, เนื้อหา)); /** decrypt*/ system.out.println ("ใช้การถอดรหัส AES symmetric โปรดป้อนกฎการเข้ารหัส: (ต้องเหมือนกับการเข้ารหัส)"); encoderules = scanner.next (); System.out.println ("โปรดป้อนเนื้อหาที่จะถอดรหัส (ciphertext):"); เนื้อหา = scanner.next (); System.out.println ("ตามกฎอินพุต"+encoderules+"การถอดรหัสข้อความธรรมดาคือ:"+se.aesdncode (encoderules, เนื้อหา)); - ผลการทดสอบ:
ใช้การเข้ารหัส AES Symmetric โปรดป้อนกฎการเข้ารหัส ใช้การเข้ารหัส AES Symmetric โปรดป้อนเนื้อหาที่คุณต้องการเข้ารหัส:
ใช้การเข้ารหัส AES symmetric เพื่อเข้ารหัส ciphertext โดยใช้การเข้ารหัส AES Symmetric ตามกฎอินพุตคือ: Z0NWRNPHGGGXHN0CQJLS58YCJHMCBBER33RWS7LW+AY =
ใช้การถอดรหัส AES Symmetric โปรดป้อนกฎการเข้ารหัส: (ต้องเหมือนกับการเข้ารหัส)
ใช้การเข้ารหัส AES Symmetric เพื่อป้อนเนื้อหา (ciphertext):
Z0NWRNPHGHGXHN0CQJLS58YCJHMCBFER33RWS7LW+AY =
การถอดรหัสแบบธรรมดาโดยใช้การเข้ารหัสแบบสมมาตร AES ตามกฎอินพุตคือ: ใช้การเข้ารหัส AES Symmetric
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น