บทความนี้อธิบายถึงอัลกอริทึมการเข้ารหัส RSA และการถอดรหัสที่ใช้ใน Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
นำเข้า java.awt.alphacomposite; นำเข้า java.awt.color; นำเข้า java.awt.font; นำเข้า java.awt.graphics2d นำเข้า java.awt.image; นำเข้า Java.awt.renderinghints; java.io.fileinputstream; นำเข้า java.io.fileoutputstream; นำเข้า java.io.ObjectInputStream; นำเข้า Java.io.ObjectOutputStream; นำเข้า Java.security.key; นำเข้า Java.security.keypair; java.security.interfaces.rsaprivatekey นำเข้า java.security.interfaces.rsapublickey; นำเข้า Javax.crypto.cipher; คลาสสาธารณะ rsautils {สตริงคงที่สาธารณะ ลอง {// KeypairGenerator ใช้เพื่อสร้างคู่คีย์สาธารณะและส่วนตัวและวัตถุถูกสร้างขึ้นตามอัลกอริทึม RSA KeypairGenerator gen = keypairgenerator.getInstance ("RSA"); // เริ่มต้นเครื่องกำเนิดคู่คีย์ขนาดคีย์คือ 1024 บิต gen.initialize (1024); // // สร้างหมายเลขสุ่มที่แข็งแกร่ง // securerandom random = ใหม่ securerandom (); // gen.initialize (1024, สุ่ม); // สร้างคู่คีย์และบันทึกไว้ในคู่แป้นคู่ = gen.generateKeyPair (); // รับคีย์ส่วนตัว rsaprivatekey prikey = (rsaprivatekey) pair.getPrivate (); // รับคีย์สาธารณะ rsapublickey pubkey = (rsapublickey) pair.getPublic (); // สร้างไฟล์คีย์ส่วนตัว ObjectOutputStream OS = ใหม่ ObjectOutputStream (ใหม่ fileOutputStream (prikeyfile)); OS.WRITEOBJECT (Prikey); os.flush (); os.close (); // สร้างไฟล์คีย์สาธารณะ OS = ใหม่ ObjectOutputStream (ใหม่ FileOutputStream (PubKeyFile)); OS.WRITEOBJECT (PUBKEY); os.flush (); os.close (); result = "สร้างไฟล์คีย์สาธารณะ ["+pubkeyfile+"] สร้างไฟล์คีย์ส่วนตัว ["+prikeyfile+"]"; } catch (exception e) {e.printstacktrace (); } ผลตอบแทนผลลัพธ์; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ลอง {string pubfile = "f:/images/pub.key"; string license = "f:/images/pri.key"; สตริงผลลัพธ์ = null; // result = makekeyfile (pubfile, ใบอนุญาต); ผลลัพธ์ = markpupra (pubfile, ใบอนุญาต); System.out.println (ผลลัพธ์); } catch (exception e) {e.printstacktrace (); }} สตริงคงที่ public String MarkPuPra (String PubFile, string license) {string results = "ข้อผิดพลาดการเข้ารหัสเกิดขึ้น"; ลอง {ObjectInputStream OS = ใหม่ ObjectInputStream (ใหม่ FileInputStream (PubFile)); RSAPUBLICKEY PUBKEY = (RSAPUBLICKEY) OS.ReadObject (); os.close (); OS = ใหม่ ObjectInputStream (ใหม่ FileInputStream (prifile)); rsaprivatekey prikey = (rsaprivatekey) os.readobject (); os.close (); string utf = "utf-8"; สตริง msg = "## จีน % ของ % คน @+_"; // ใช้คีย์สาธารณะเพื่อเข้ารหัสคีย์ส่วนตัวเพื่อถอดรหัส System.out.println ("ข้อความต้นฉบับ:" + msg); ไบต์ [] puk = handledata (pubkey, msg.getBytes (UTF), 1); System.out.println ("ข้อมูลไฟล์ที่เข้ารหัส:" + สตริงใหม่ (PUK, UTF)); ไบต์ [] dpuk = handledata (prikey, puk, 0); System.out.println ("ข้อมูลไฟล์ถอดรหัส:" + สตริงใหม่ (dpuk, utf)); msg = "jd#ของเรา ¥+=#new"; // ใช้คีย์ส่วนตัวเพื่อเข้ารหัสคีย์สาธารณะเพื่อถอดรหัส System.out.println ("ข้อความต้นฉบับ:" + msg); ไบต์ [] prk = handledata (prikey, msg.getBytes (UTF), 1); System.out.println ("ข้อมูลไฟล์ที่เข้ารหัส:" + สตริงใหม่ (PRK, UTF)); ไบต์ [] dprk = handledata (pubkey, prk, 0); System.out.println ("ข้อมูลไฟล์ถอดรหัส:" + สตริงใหม่ (DPRK, UTF)); ผลลัพธ์ = "การเข้ารหัสและถอดรหัสเสร็จสิ้น"; } catch (exception e) {e.printstacktrace (); } ส่งคืนผลลัพธ์; } / ** * * @param k * @param data * @param เข้ารหัส 1 การเข้ารหัส 0 decryption * @return * @throws ยกเว้น * / สาธารณะคงที่สาธารณะ [] handledata (คีย์คีย์, byte [] ข้อมูล, int) โยนข้อยกเว้น {if (key! = null) if (type == 1) {ci.init (cipher.encrypt_mode, key); ไบต์ [] res = ci.dofinal (ข้อมูล); Ret Res; } if (type == 0) {ci.init (cipher.decrypt_mode, key); ไบต์ [] res = ci.dofinal (ข้อมูล); Ret Res; }} return null; -PS: เพื่อนที่สนใจในการเข้ารหัสและถอดรหัสสามารถอ้างถึงเครื่องมือออนไลน์ของเว็บไซต์นี้:
ข้อความการเข้ารหัสและถอดรหัสออนไลน์ (รวมถึง AES, DES, RC4 ฯลฯ ):
http://tools.vevb.com/password/txt_encode
เครื่องมือเข้ารหัสออนไลน์ MD5:
http://tools.vevb.com/password/createMd5Password
เครื่องมือเข้ารหัสอัลกอริทึมแฮช/แฮชออนไลน์:
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 โปรดตรวจสอบหัวข้อของเว็บไซต์นี้: "สรุปทักษะการดำเนินงานทางคณิตศาสตร์ Java", "การสอนเกี่ยวกับโครงสร้างข้อมูล Java และอัลกอริทึม", "บทสรุปของตัวละคร Java และทักษะการดำเนินการสตริง", "สรุปการดำเนินงานของ Java
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน