Этот пример разделяет инструмент Java Encryption и Decryption, подходящий для Javase/Javaee/Android для всех. Конкретный контент заключается в следующем
Package longshu.utils.security; Импорт java.lang.reflect.method; импорт java.security.invalidkeyexception; импорт java.security.key; импорт java.security.messagedigest; импорт java.security.nosuchalgorithmexception; импорт java.security.securerandom; Импорт javax.crypto.badpaddingexception; import javax.crypto.cipher; импорт javax.crypto.illegalblocksizexception; импорт javax.crypto.keygenerator; import javax.crypto.nosuchpaddingExcept javax.crypto.spec.secretkeyspec; /*** Инструмент шифрования и дешифрования Java. * Оба Javase/Javaee/Android применимы** @author longshu 13 апреля 2016 г.*/Общедоступный класс Encryptdecrypt {// Нет необходимости создавать объект Private EncryptDecrypt () {}/*** Sha1 зашифрованные битные данные* @param source -byte* @retun {try {messagegest sha1digest = messagedigest.getinstance ("sha-1"); sha1digest.update (источник); byte targetdigest [] = sha1digest.digest (); вернуть TargetDigest; } catch (nosuchalgorithmexception e) {бросить новое runtimeexception (e); }} / *** SHA1 зашифрованная строка данных* @param Source String, чтобы быть зашифрована* @return зашифрованная строка* / public Static String Sha1 (String Source) {return byte2Hexstr (sha1bit (source.getbytes ())); } / *** MD5 зашифрованные битовые данные* @param источник байтовой массивы* @return зашифрованный байтовый массив* / public static byte [] md5bit (byte [] source) {try {// Получить объект Messagedigest of Md5 Digest Algorithm MessageDigest MSDIGEST = MSBADENANSE (MD5STANCE (MD5STANCE (MD5STANCE (MD5STANCE (MD5SSTANCE (MD5SSTANCE (MD5SSTANCE (MDSED5STANCE (MDSED5 // Обновление Digest md5digest.update (Source); // Получите Ciphertext return md5digest.digest (); } catch (nosuchalgorithmexception e) {бросить новое runtimeexception (e); }} / *** MD5 зашифрованная строка, 32-разрядный длинный* @param исходный контент, чтобы зашифровать* @return зашифрованное содержимое* / public static String md5 (String Source) {return byte2hexstr (md5bit (source.getbytes ())); } / *** BASE64 Encoding* @param Source String, которая будет кодирована* @return Кодированная строка* / public Static String Encodebase64 (String Source) {class <?> Clazz = null; Метод encodemethod = null; try {// Приоритет использование сторонних библиотек 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); // Статический метод метода отражения не требует объекта для выполнения возврата новой строки ((byte []) encodemethod.invoke (null, source.getbytes ())); } catch (classnotfoundexception e) {string vm = system.getProperty ("java.vm.name"); System.out.println (VM); try {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)); } else {// 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 (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 = new Base64encoder (); // return encoder.encode (source.getbytes ()); // org.apache.commons.codec.binary.base64 // return new String (base64.encodebase64 (source.getbytes ())); } / *** base64 Декодирование* @param encodesource encodesource encodesource* @return string перед кодированием* / public static String decodebase64 (String encodesource) {class <?> Clazz = null; Метод decodemethod = null; try {// Приоритет использование сторонних библиотек 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); try {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)); } 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); вернуть новую строку ((byte []) decodemethod.invoke (clazz.newinstance (), encodesource)); }} catch (classnotfoundexception e1) {return null; } catch (Exception e1) {return null; }} catch (Exception e) {return null; } / * * Android * android.util.base64 * / // return new // string (base64.decode (encodesource.getbytes (), base64.default)); / * * Javase/javaee */// sun.misc.base64decoder // try {// base64decoder decoder = new base64decoder (); // возвращать новую строку (decoder.decodebuffer (encodesource)); //} catch (ioException e) {// бросить новый runtimeexception (e); //} // org.apache.commons.codec.binary.base64 // возвращать новую строку (base64.decodebase64 (encodesource.getbytes ())); }/*** AES Encryption* @param Content Content Content, чтобы быть зашифрованным* @param пароль пароля* @return*/public Static Byte [] Encryptbitaes (Byte [] Content, String Password) {try {cipher incryptcipher = cipher.getinstance ("aes/ecb/pkcs5padding"////craitysdance ("aes/ecb/pkcs5padding"///ecbs. encryptcipher.init (cipher.encrypt_mode, getKey (пароль)); // инициализировать byte [] result = encryptcipher.dofinal (content); результат возврата; // incrypt} catch (nosuchalgorithmexception e) {e.printstacktrace (); } catch (nosuchpaddingexception e) {e.printstacktrace (); } catch (InvalidKeyException e) {e.printStackTrace (); } catch (allodalblocksizexception e) {e.printstacktrace (); } catch (badPaddingException e) {e.printstackTrace (); } return null; }/*** AES Decrypt* @param Content Content Content для расшифровки* @param пароль Decrypt ключа* @return*/public Static Byte [] decryptbitaes (byte [] content, String passwer) {try {cipher decryptcipher = cipher.getinstanc decryptcipher.init (cipher.decrypt_mode, getkey (пароль)); // инициализировать байт [] result = decryptcipher.dofinal (content); результат возврата; // incrypt result} catch (InvalidKeyException e) {e.printstackTrace (); } catch (nosuchalgorithmexception e) {e.printstacktrace (); } catch (nosuchpaddingexception e) {e.printstacktrace (); } catch (allodalblocksizexception e) {e.printstacktrace (); } catch (badPaddingException e) {e.printstackTrace (); } return null; } / *** aes string incryption* @param Содержимое контента, чтобы быть зашифрованным* @param пароль пароля* @return* / public Static String Encryptaes (String Content, String Password) {return Byte2Hexstr (encryptbitaes (content.getBytes (), пароль)); } / *** aes string decryption* @param Содержимое контента для расшифровки* @param пароль Decrypt* @return* / public static String Decryptaes (String Content, String Password) {return New String (Decryptbitaes (hexstr2bytes (content), пароль)); } / *** Сгенерировать клавишу из указанной строки* @param пароль Строка, которая составляет ключ* @return сгенерированный ключ* @throhs nosuchalgorithmexception* / private static key getKey (String Password) Throws nosuchalgorithmexception {securorAndom securerandom = new SecureRandom (password.getbytes ()); // генерировать ключевой ключевой клавиш kgen = keygenerator.getInstance ("aes"); kgen.init (128, Securerandom); SecretKey SecretKey = kgen.GenerateKey (); byte [] encodeformat = secretKey.getEncoded (); // преобразовать ключ секретный key = new secretkeyspec (encodeformat, "aes"); вернуть ключ; } /*** Преобразовать байтовый массив в строку, представляющую шестнадцатеричные значения. * Например: byte [] {8,18} to: 0812 * и byte [] hexstr2bytes (строки строки) являются взаимно обратимыми процессами преобразования. * @param байты байтового массива, который необходимо преобразовать* @return преобразованная строка*/ 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 (); } /** * Конвертировать строку, представляющую шестнадцатеричные значения, в байтовую массив, * и строка Byte2Hexstr (Byte [] Bytes) являются взаимно обратимыми процессами преобразования. * @param bytes * @return преобразованный байт -массив */ public static byte [] hexstr2bytes (String Strin) {byte [] arrb = strin.getbytes (); int ilen = arrb.length; // два символа представляют байт, поэтому длина байтового массива - это длина струны, деленная на 2 байта [] Arrow = новый байт [ilen / 2]; for (int i = 0; i <ilen; i = i + 2) {string strtmp = new String (arrb, i, 2); ARROUT [i / 2] = (byte) integer.parseint (strtmp, 16); } return Arrouth; }}Выше приведено все об этой статье, я надеюсь, что для всех будет полезно изучать программирование Java.