يشارك هذا المثال أداة تشفير Java وفك التشفير مناسبة لـ Javase/Javaee/Android ليتعلمها الجميع. المحتوى المحدد كما يلي
حزمة longshu.utils.security ؛ استيراد java.lang.reflect.method ؛ استيراد java.security.invalidKeyexception ؛ استيراد java.security.key ؛ استيراد java.security.messagedigest ؛ استيراد java.security.nosuchalgorithmexception ؛ java.security.securandom ؛ استيراد javax.crypto.badpadddingexception ؛ استيراد javax.crypto.cipher ؛ استيراد javax.crypto.illegalblockseizeexception ؛ استيراد javax.crypto.keygenerator ؛ استيراد javax.crypto.nosuchpaddingdding ؛ javax.crypto.spec.secretkeyspec ؛ /*** أداة تشفير Java وفك التشفير. * كل من Javase/Javaee/Android قابلة للتطبيق** Author Longshu في 13 أبريل 2016*/فئة عامة incryptDecrypt {// لا حاجة لإنشاء كائن خاص تشفير DevDecrypt () {}/** {try {messagedigest sha1digest = messagedigest.getInstance ("sha-1") ؛ sha1digest.update (المصدر) ؛ byte targetDigest [] = sha1digest.digest () ؛ إرجاع TargetDigest ؛ } catch (nosuchalgorithmexception e) {رمي new runTimeException (e) ؛ }} / *** بيانات سلسلة sha1 المشفرة* @param سلسلة المصدر ليتم تشفيرها* @regurn string* / سلسلة ثابتة عامة sha1 (مصدر السلسلة) {return byte2Hexstr (sha1bit (source.getbytes ())) ؛ } / *** MD5 بيانات بت مشفرة* param source byte array* @REGRENTER BYTE ARRAY* / public static byte [] md5bit (byte [] source) {try {// get the messagedigest of the md5 digest messagedigest md5digest = // تحديث Digest md5digest.update (المصدر) ؛ // الحصول على ciphertext return md5digest.digest () ؛ } catch (nosuchalgorithmexception e) {رمي new runTimeException (e) ؛ }} / *** سلسلة مشفرة MD5 ، محتوى مصدر 32 بت* param ليتم تشفيره* محتوى مشفر* / سلسلة ثابتة MD5 (مصدر السلسلة) {return byte2Hexstr (md5bit (source.getbytes ())) ؛ } / *** BASE64 الترميز* @param سلسلة المصدر ليتم ترميزها* @regurn string* / public static string encodebase64 (String source) {class <؟> clazz = null ؛ طريقة encodemethod = فارغة ؛ جرب {// استخدام أولوية مكتبات الطرف الثالث 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) ؛ جرب {if ("dalvik" .equals (vm)) {// Android clazz = class.forname ("Android.Util.base64") ؛ // byte [] base64.encode (byte [] input ، int flags) encodemethod = clazz.getMethod ("encode" ، byte []. class ، int.class) ؛ System.out.println ("Encodebase64->" + clazz) ؛ System.out.println ("EncodeMethod->" + EncodeMethod) ؛ إرجاع سلسلة جديدة ((byte []) encodemethod.invoke (null ، source.getBytes () ، 0)) ؛ } آخر {// javase/javaee clazz = class.forname ("sun.misc.base64encoder") ؛ EncodeMethod = clazz.getMethod ("encode" ، byte []. class) ؛ System.out.println ("Encodebase64->" + clazz) ؛ System.out.println ("EncodeMethod->" + EncodeMethod) ؛ return (سلسلة) encodemethod.invoke (clazz.newinstance () ، source.getBytes ()) ؛ }} catch (classNotFoundException e1) {return null ؛ } catch (استثناء e1) {return null ؛ }} catch (استثناء e) {return null ؛ } / * * Android * Android.Util.base64 * // return base64.encodetoString (source ، base64.default) ؛ // إرجاع سلسلة جديدة (base64.encode (source.getBytes () ، base64.default)) ؛ / * * javase/javaee */// sun.misc.base64encoder // base64encoder Encoder = new Base64encoder () ؛ // return Encoder.encode (source.getBytes ()) ؛ // org.apache.commons.codec.binary.base64 // إرجاع سلسلة جديدة (base64.encodeBase64 (source.getBytes ())) ؛ } / *** base64 decoding* param encodesource encodesource encodesource* @regurn string قبل تشفير* / سلسلة ثابتة ثابتة decodeBase64 (سلسلة encodesource) {class <؟> clazz = null ؛ طريقة decodemethod = فارغة ؛ جرب {// استخدام أولوية مكتبات الطرف الثالث 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) ؛ . } catch (classnotfoundException e) {String vm = system.getProperty ("java.vm.name") ؛ System.out.println (VM) ؛ جرب {if ("dalvik" .equals (vm)) {// Android clazz = class.forname ("Android.Util.base64") ؛ // byte [] base64.decode (byte [] input ، 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)) ؛ } آخر {// javase/javaee clazz = class.forname ("sun.misc.base64decoder") ؛ decodemethod = clazz.getMethod ("decodeBuffer" ، string.class) ؛ System.out.println ("decodeBase64->" + clazz) ؛ system.out.println ("decodemethod->" + decodemethod) ؛ إرجاع سلسلة جديدة ((byte []) decodemethod.invoke (clazz.newinstance () ، encodesource)) ؛ }} catch (classNotFoundException e1) {return null ؛ } catch (استثناء e1) {return null ؛ }} catch (استثناء e) {return null ؛ } / * * Android * Android.UTIL.Base64 * // return new // string (base64.decode (encodesource.getBytes () ، base64.default)) ؛ / * * javase/javaee */// sun.misc.base64decoder // حاول {// base64decoder decoder = new Base64Decoder () ؛ // إرجاع سلسلة جديدة (decoder.decodeBuffer (encodesource)) ؛ //} catch (ioException e) {// ream new RunTimeException (e) ؛ //} // org.apache.commons.codec.binary.base64 // إرجاع سلسلة جديدة (base64.decodeBase64 (encodesource.getBytes ())) ؛ }/*** AES Encryption* param محتوى المحتوى ليتم تشفيره* param password Encryption Password* @REGRENT*/public static byte [] incryptbitaes (byte [] content ، string password) {try {cipher encryptcipher = cipher.getinstance ("aes/ecb/pkcs5pad EncryptCipher.init (cipher.encrypt_mode ، getKey (password)) ؛ // تهيئة byte [] result = encryptcipher.dofinal (content) ؛ نتيجة العودة // encrypt} catch (nosuchalgorithmexception e) {e.printstacktrace () ؛ } catch (nosuchpaddingexception e) {E.PrintStackTrace () ؛ } catch (invalidKeyException e) {E.PrintStackTrace () ؛ } catch (incholicalBlockSeizeException e) {e.printstacktrace () ؛ } catch (badpaddingexception e) {e.printStackTrace () ؛ } إرجاع فارغ ؛ }/*** aes decrypt* param محتوى محتوى ليتم فك تشفيره* param password decrypt Key*/regurn*/public static byte [] decryptcipher.init (cipher.decrypt_mode ، getKey (password)) ؛ // تهيئة byte [] result = decryptcipher.dofinal (content) ؛ نتيجة العودة // encrypt result} catch (invalidKeyException e) {E.PrintStackTrace () ؛ } catch (nosuchalgorithMexception e) {e.printstacktrace () ؛ } catch (nosuchpaddingexception e) {E.PrintStackTrace () ؛ } catch (incholicalBlockSeizeException e) {e.printstacktrace () ؛ } catch (badpaddingexception e) {e.printStackTrace () ؛ } إرجاع فارغ ؛ } / *** AES string Encryption* param محتوى المحتوى ليتم تشفيره* Param Password Encryption Password* return* / public static String Encryptaes (محتوى السلسلة ، كلمة مرور السلسلة) {return byte2Hexstr (incryptbittaes (content.getbytes () ، كلمة المرور)) ؛ } / *** AES string decryption* param محتوى المحتوى ليتم فك تشفيره* param password decrypt Key* / / / public static String decryptaes (محتوى السلسلة ، كلمة مرور السلسلة) {إرجاع سلسلة جديدة (decryptbitaes (hexstr2bytes (محتوى) ، كلمة مرور)) ؛ } / *** إنشاء مفتاح من السلسلة المحددة* Param Password. السلسلة التي تشكل المفتاح* @RETURN تم إنشاء مفتاح* throws nosuchalgorithMexception* / مفتاح static static getKey (سلسلة كلمة مرور) nosuchalgorithmexception {securerandom secorerandom = new surederandom (password.getbytes ()) ؛ // إنشاء keygenerator kgen = keygenerator.getInstance ("AES") ؛ Kgen.Init (128 ، Securerandom) ؛ SecretKey SecretKey = kgen.generatekey () ؛ byte [] encodeFormat = secretKey.getenCoded () ؛ // تحويل المفتاح SecretKeySpec Key = New SecretKeySpec (EncodeFormat ، "AES") ؛ مفتاح العودة ؛ } /*** قم بتحويل صفيف البايت إلى سلسلة تمثل القيم السداسية. * على سبيل المثال: بايت [] {8،18} إلى: 0812 * و byte [] HexStr2bytes (سلسلة السلسلة) هي عمليات تحويل قابلة للانعكاس. * param bytes صفيف البايت الذي يجب تحويله* @Return string*/ public Static String Byte2Hexstr (byte [] bytes) {int byteslen = bytes.length ؛ // يتم تمثيل كل بايت بحرفتين ، وبالتالي فإن طول السلسلة هو ضعف طول سلسلة stringbuffer hexstring = new StringBuffer (byteslen * 2) ؛ لـ (int i = 0 ؛ i <byteslen ؛ i ++) {// قم بكل بايت مع 0xFF ، ثم قم بتحويله إلى عشري ، ثم تحويله إلى hex بواسطة عدد صحيح. String hex = integer.toHexString (bytes [i] & 0xff) ؛ if (hex.length () <2) {hexstring.append (0) ؛ // إذا قمت بإضافة 0 إلى 1 بت قبل} hexstring.append (hex) ؛ } إرجاع hexstring.toString () ؛ } /** * قم بتحويل سلسلة تمثل hexvalues إلى صفيف بايت ، * و string byte2Hexstr (byte [] bytes) هي عمليات تحويل قابلة للانعكاس بشكل متبادل. * param bytes * @REGANTER BYTE ARRAY */ public static byte [] HexStr2Bytes (String strin) {byte [] arrb = strin.getbytes () ؛ int ilen = arrb.length ؛ // تمثل حرفين بايت ، وبالتالي فإن طول صفيف البايت هو طول السلسلة مقسومًا على 2 بايت [] arrout = new byte [ilen / 2] ؛ لـ (int i = 0 ؛ i <ilen ؛ i = i + 2) {string strtmp = new string (arrb ، i ، 2) ؛ arrout [i / 2] = (byte) integer.parseint (strtmp ، 16) ؛ } إرجاع arrout ؛ }}ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون من المفيد للجميع تعلم برمجة Java.