ตัวอย่างนี้ใช้เครื่องมือเข้ารหัสและถอดรหัส Java ที่เหมาะสำหรับ Javase/Javaee/Android เพื่อให้ทุกคนเรียนรู้ เนื้อหาเฉพาะมีดังนี้
แพ็คเกจ longshu.utils.security; นำเข้า java.lang.reflect.method นำเข้า java.security.invalidkeyException นำเข้า Java.security.key; นำเข้า Java.security.Messagedigest; นำเข้า Java.security.nosuchalgorithmexception; นำเข้า Javax.crypto.badpaddingexception; นำเข้า Javax.crypto.cipher; นำเข้า Javax.crypto.illegalblocksizeException; นำเข้า Javax.crypto.keyenerator; นำเข้า Javax.crypto.nosuchpadexception; javax.crypto.spec.secretkeyspec; /*** เครื่องมือเข้ารหัสและถอดรหัส Java * ทั้ง javase/javaee/Android ใช้ได้** @author longshu 13 เมษายน 2016*/คลาสสาธารณะเข้ารหัส {// ไม่จำเป็นต้องสร้างวัตถุส่วนตัวเข้ารหัสส่วนตัว () {}/*** sha1 ที่เข้ารหัสบิต sha1bit (byte [] แหล่งที่มา) {ลอง {messageGeSest sha1digest = messageDigest.getInstance ("sha-1"); sha1digest.update (แหล่งที่มา); Byte TargetDigest [] = sha1Digest.digest (); ส่งคืน TargetDigest; } catch (nosuchalgorithmexception e) {โยน runtimeException ใหม่ (E); }} / *** ข้อมูลสตริงที่เข้ารหัส sha1 sha1* @param ต้นฉบับสตริงที่จะเข้ารหัส* @return สตริงที่เข้ารหัส* / สตริงคงที่สาธารณะ sha1 (แหล่งที่มาของสตริง) {return byte2Hexstr (sha1bit (source.getBytes ())); } / *** md5 ข้อมูลบิตที่เข้ารหัส* @param แหล่งที่มา byte array* @return encrypted byte array* / public Static byte [] md5bit (BYTE [] แหล่งที่มา) {ลอง {// รับ messagedigest วัตถุของ md5 digest algorithm // อัปเดต Digest MD5Digest.update (แหล่งที่มา); // รับ ciphertext return md5digest.digest (); } catch (nosuchalgorithmexception e) {โยน runtimeException ใหม่ (E); }} / *** สตริงที่เข้ารหัส md5, ยาว 32 บิต* @param เนื้อหาแหล่งที่มาที่จะเข้ารหัส* @return เนื้อหาที่เข้ารหัส* / สตริงคงที่สาธารณะ md5 (แหล่งที่มาของสตริง) {return byte2Hexstr (md5bit (source.getBytes ()); } / *** การเข้ารหัส base64* @param สตริงแหล่งที่มาที่จะเข้ารหัส* @return สตริงที่เข้ารหัส* / สตริงคงที่สาธารณะ ENCODEBASE64 (แหล่งสตริง) {คลาส <?> clazz = null; วิธี encodemethod = null; ลอง {// การใช้ลำดับความสำคัญของห้องสมุดบุคคลที่สาม clazz = class.forName ("org.apache.commons.codec.binary.base64"); encodeMethod = clazz.getMethod ("encodeBase64", byte []. class); System.out.println ("ENCODEBASE64->" + Clazz); System.out.println ("encodemethod->" + encodemethod); // วิธีการคงที่ของวิธีการสะท้อนไม่จำเป็นต้องใช้วัตถุในการเรียกใช้สตริงใหม่ ((ไบต์ []) encodeMethod.invoke (null, source.getBytes ())); } catch (classnotFoundException e) {String vm = system.getProperty ("java.vm.name"); System.out.println (VM); ลอง {ถ้า ("dalvik" .equals (vm)) {// Android clazz = class.forname ("Android.util.base64"); // byte [] base64.encode (ไบต์ [] อินพุต, int flags) encodeMethod = clazz.getMethod ("เข้ารหัส", ไบต์ []. คลาส, int.class); System.out.println ("ENCODEBASE64->" + Clazz); System.out.println ("encodemethod->" + encodemethod); ส่งคืนสตริงใหม่ ((ไบต์ []) encodeMethod.invoke (null, source.getBytes (), 0)); } else {// javase/javaee clazz = class.forname ("sun.misc.base64encoder"); encodeMethod = clazz.getMethod ("เข้ารหัส", byte []. class); System.out.println ("ENCODEBASE64->" + Clazz); System.out.println ("encodemethod->" + encodemethod); return (string) encodeMethod.invoke (clazz.newinstance (), source.getBytes ()); }} catch (classnotFoundException e1) {return null; } catch (Exception e1) {return null; }} catch (exception e) {return null; } / * * Android * Android.util.base64 * / // return base64.encodeToString (แหล่งที่มา, base64.default); // ส่งคืนสตริงใหม่ (base64.encode (source.getBytes (), base64.default)); / * * javase/javaee * // // sun.misc.base64encoder // base64encoder encoder = ใหม่ base64enencoder (); // return encoder.encode (source.getBytes ()); // org.apache.commons.codec.binary.base64 // ส่งคืนสตริงใหม่ (base64.encodeBase64 (source.getBytes ())); } / *** การถอดรหัส Base64* @param เข้ารหัสเข้ารหัสเข้ารหัสเข้ารหัส encodesource* @return สตริงก่อนที่จะเข้ารหัส* / String String DecodeBase64 (String encodesource) {class <?> clazz = null; วิธี decodemethod = null; ลอง {// การใช้ลำดับความสำคัญของห้องสมุดบุคคลที่สาม clazz = class.forName ("org.apache.commons.codec.binary.base64"); DecodeMethod = clazz.getMethod ("DecodeBase64", byte []. class); System.out.println ("DecodeBase64->" + clazz); System.out.println ("Decodemethod->" + Decodemethod); // ดำเนินการวิธีการคงที่ของวิธีการสะท้อนโดยไม่มีวัตถุส่งคืนสตริงใหม่ ((byte []) decodeMethod.invoke (null, encodesource.getBytes ())); } catch (classnotFoundException e) {String vm = system.getProperty ("java.vm.name"); System.out.println (VM); ลอง {ถ้า ("dalvik" .equals (vm)) {// Android clazz = class.forname ("Android.util.base64"); // byte [] base64.decode (byte [] อินพุต, int flags) decodeMethod = clazz.getMethod ("decode", byte []. class, int.class); System.out.println ("DecodeBase64->" + clazz); System.out.println ("Decodemethod->" + Decodemethod); ส่งคืนสตริงใหม่ ((byte []) decodeMethod.invoke (null, encodesource.getBytes (), 0)); } else {// javase/javaee clazz = class.forname ("sun.misc.base64decoder"); DecodeMethod = clazz.getMethod ("DecodeBuffer", String.class); System.out.println ("DecodeBase64->" + clazz); System.out.println ("Decodemethod->" + Decodemethod); ส่งคืนสตริงใหม่ ((ไบต์ []) decodemethod.invoke (clazz.newinstance (), encodesource)); }} catch (classnotFoundException e1) {return null; } catch (Exception e1) {return null; }} catch (exception e) {return null; } / * * Android * Android.util.base64 * / // ส่งคืนใหม่ // สตริง (base64.decode (encodesource.getBytes (), base64.default)); / * * javase/javaee * // // sun.misc.base64decoder // ลอง {// base64decoder decoder = ใหม่ base64decoder (); // ส่งคืนสตริงใหม่ (decoder.decodeBuffer (encodesource)); //} catch (ioexception e) {// โยน runtimeException ใหม่ (e); //} // org.apache.commons.codec.binary.base64 // ส่งคืนสตริงใหม่ (base64.decodeBase64 (encodesource.getBytes ())); }/*** การเข้ารหัส AES* เนื้อหาเนื้อหา @param เนื้อหาที่จะเข้ารหัส* @param รหัสผ่านเข้ารหัสรหัสผ่าน* @return*/ไบต์คงที่สาธารณะ [] Encryptbitaes (ไบต์ [] เนื้อหาสตริง) {ลอง {Cipher EncryptCipher = cipher.getinstance ENCRYPTCIPHER.INIT (CIPHER.ENCRYPT_MODE, GETKEY (รหัสผ่าน)); // เริ่มต้นไบต์ [] ผลลัพธ์ = ENCRYPTCIPHER.DOFINAL (เนื้อหา); ผลการกลับมา; // encrypt} 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 (); } return null; }/*** AES DECRYPT* เนื้อหาเนื้อหาที่จะถอดรหัส* @param รหัสผ่าน Decrypt ปุ่ม* @return*/ไบต์สาธารณะคงที่ [] Decryptbitaes (ไบต์ [] เนื้อหา, รหัสผ่านสตริง) {ลอง {cipher decryptcipher = cipher.getinstance ( decryptcipher.init (cipher.decrypt_mode, getkey (รหัสผ่าน)); // เริ่มต้นไบต์ [] result = decryptcipher.dofinal (เนื้อหา); ผลการกลับมา; // เข้ารหัสผลลัพธ์} catch (InvalidKeyException E) {E.printStackTrace (); } catch (nosuchalgorithmexception e) {e.printstacktrace (); } catch (nosuchpaddingexception e) {e.printstacktrace (); } catch (unlueLblocksizeException e) {e.printStackTrace (); } catch (badpaddingexception e) {e.printstacktrace (); } return null; } / *** การเข้ารหัสสตริง AES* @param เนื้อหาเนื้อหาที่จะเข้ารหัส* @param รหัสผ่านรหัสผ่านเข้ารหัส* @return* / String String String Encryptaes (เนื้อหาสตริงรหัสผ่านสตริง) {return byte2Hexstr (EncryptBitaes } / *** AES String Decryption* เนื้อหาเนื้อหา @param ที่จะถอดรหัส* @param รหัสผ่าน Decrypt ปุ่ม* @return* / Decryptaes สตริงคงที่สาธารณะ (เนื้อหาสตริงรหัสผ่านสตริง) {ส่งคืนสตริงใหม่ (DecryptBitaes } / *** สร้างคีย์จากสตริงที่ระบุ* @param รหัสผ่านสตริงที่ประกอบด้วยคีย์* @return คีย์ที่สร้างขึ้น* @throws nosuchalgorithMexception* / คีย์คงที่ส่วนตัว getkey (รหัสผ่านสตริง) โยน nosuchalgorithmexception // สร้างคีย์ keygenerator kgen = keygenerator.getInstance ("AES"); kgen.init (128, securerandom); SecretKey SecretKey = Kgen.GenerateKey (); ไบต์ [] encodeFormat = secretKey.GetEncoded (); // แปลงคีย์ secretkeyspec key = ใหม่ SecretKeySpec (ENCODEFORMAT, "AES"); กุญแจกลับ; } /*** แปลงอาร์เรย์ไบต์เป็นสตริงที่แสดงถึงค่า hexadecimal * ตัวอย่างเช่น: byte [] {8,18} ถึง: 0812 * และ byte [] hexstr2bytes (strin strin) เป็นกระบวนการแปลงย้อนกลับร่วมกัน * @param bytes อาร์เรย์ไบต์ที่ต้องแปลง* @@return สตริงแปลง*/ สตริงคงที่สาธารณะ byte2Hexstr (ไบต์ [] ไบต์) {int byteslen = bytes.length; // แต่ละไบต์จะแสดงด้วยอักขระสองตัวดังนั้นความยาวของสตริงจะมีความยาวเป็นสองเท่าของสตริงอาร์เรย์ hexString = สตริงใหม่ (ไบต์ * 2); สำหรับ (int i = 0; i <byteslen; i ++) {// ดำเนินการแต่ละไบต์ด้วย 0xff จากนั้นแปลงเป็นทศนิยมจากนั้นแปลงเป็น hex โดยจำนวนเต็ม สตริง hex = integer.tohexstring (ไบต์ [i] & 0xff); if (hex.length () <2) {hexstring.append (0); // ถ้าคุณเพิ่ม 0 ถึง 1 บิตก่อน} hexstring.append (hex); } return hexstring.toString (); } /** * แปลงสตริงที่เป็นตัวแทนของ hexvalues เป็นอาร์เรย์ไบต์ * และสตริง byte2Hexstr (ไบต์ [] ไบต์) เป็นกระบวนการแปลงย้อนกลับร่วมกัน * @param bytes * @return แปลงอาร์เรย์ไบต์ */ ไบต์คงที่สาธารณะ [] hexstr2bytes (สตริง strin) {byte [] arrb = strin.getBytes (); int Ilen = arrb.length; // สองอักขระแสดงถึงไบต์ดังนั้นความยาวของอาร์เรย์ไบต์คือความยาวของสตริงหารด้วย 2 ไบต์ [] การนัดหมาย = ไบต์ใหม่ [ilen / 2]; สำหรับ (int i = 0; i <ilen; i = i + 2) {string strtmp = สตริงใหม่ (arrb, i, 2); Arrout [I / 2] = (ไบต์) จำนวนเต็ม PARSEINT (strtmp, 16); } คืนการนัดหมาย; -ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนในการเรียนรู้การเขียนโปรแกรม Java