Este ejemplo comparte una herramienta de cifrado y descifrado de Java adecuada para Javase/Javaee/Android para que todos los aprendan. El contenido específico es el siguiente
paquete longshu.utils.security; import java.lang.reflect.method; import java.security.invalidkeyException; import java.security.key; import java.security.messagedigest; import java.security.nosuchalgorithmexexception; import java.security.secuantom; import javax.crypto.badpaddingexception; import javax.crypto.cipher; import javax.crypto.illegalblocksizeException; import javax.crypto.keyGenerator; import javax.crypto.nosuchpaddingexception; import javax.crypto.secretkey; import; importar; import javax.crypto.spec.secretkeyspec; /*** Herramienta de cifrado y descifrado de Java. * Ambos javase/javaee/android son aplicables** @author longshu 13 de abril de 2016*/public class encryptDecrypt {// no es necesario crear un objeto privado encryptdecrypt () {}/*** sha1 datos bit cifrados* @param fuente byte byte* @cripurn encrybed byte array*/public static byte static byte static static byte) {try {MessageGest sha1digest = messageDigest.getInstance ("sha-1"); sha1digest.update (fuente); byte TargetDigest [] = sha1digest.digest (); devolver TargetDigest; } Catch (nosuchalgorithMexception e) {Throw New RuntimeException (e); }} / *** SHA1 Datos de cadena cifrados* @param La cadena de fuente para estar encriptada* @return cifrado cadena* / public static shat sha1 (fuente de cadena) {return byte2hexstr (sha1bit (fuente.getByTes ())); } /** * MD5 encrypted Bit data* @param source byte array* @return Encrypted byte array*/ public static byte[] MD5Bit(byte[] source) { try { // Get the MessageDigest object of the MD5 digest algorithm MessageDigest md5Digest = MessageDigest.getInstance("MD5"); // actualizar el digest md5digest.update (fuente); // Obtenga el retorno de texto cifrado md5digest.digest (); } Catch (nosuchalgorithMexception e) {Throw New RuntimeException (e); }} / *** MD5 Cadena cifrada, 32 bits de largo* @param Contenido de origen para estar encriptado* @return contenido cifrado* / public static string md5 (fuente de cadena) {return byte2hexstr (md5bit (fuente.getByTes ())); } / *** Base64 Codificación* @param cadena fuente para estar codificada* @return cadena codificada* / public static string codeDebase64 (fuente de cadena) {class <?> Clazz = null; Método codemethod = null; Pruebe {// uso prioritario de bibliotecas de terceros 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); // El método estático del método de reflexión no requiere que un objeto ejecute return new String ((byte []) codemethod.invoke (null, fuente.getBytes ())); } Catch (ClassNotFoundException e) {String vm = system.getProperty ("java.vm.name"); System.out.println (VM); Pruebe {if ("dalvik" .equals (vm)) {// android clazz = class.forname ("android.util.base64"); // byte [] base64.Encode (byte [] input, int flags) codemethod = clazz.getMethod ("encode", byte []. class, int.class); System.out.println ("EncodeBase64->" + Clazz); System.out.println ("Encodemethod->" + Encodemethod); return new String ((byte []) codemethod.invoke (null, fuente.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) codemethod.invoke (clazz.newinstance (), fuente.getBytes ()); }} Catch (ClassNotFoundException e1) {return null; } catch (Exception e1) {return null; }} capt (excepción e) {return null; } / * * Android * android.util.base64 * / // return Base64.encodetostring (fuente, base64.default); // devolver nueva cadena (base64.encode (fuente.getBytes (), base64.default)); / * * Javase/javaee */// sun.misc.base64Encoder // Base64Encoder Encoder = new Base64Encoder (); // return encoder.encode (fuente.getBytes ()); // org.apache.commons.codec.binary.base64 // return nueva cadena (base64.encodeBase64 (fuente.getBytes ())); } / *** base64 decodificación* @param encodesource encodesource encodesource* @return cadena antes de codificar* / public static string decodeBase64 (string encodesource) {class <?> clazz = null; Método decodemethod = null; Pruebe {// uso prioritario de bibliotecas de terceros 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); // Ejecutar métodos estáticos de método de reflexión sin retorno de objeto nueva cadena ((byte []) decodemethod.invoke (null, encodesource.getBytes ())); } Catch (ClassNotFoundException e) {String vm = system.getProperty ("java.vm.name"); System.out.println (VM); Pruebe {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); return new String ((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); return new String ((byte []) decodemethod.invoke (clazz.newinstance (), encodesource)); }} Catch (ClassNotFoundException e1) {return null; } catch (Exception e1) {return null; }} capt (excepción e) {return null; } / * * Android * android.util.base64 * / // return nuevo // string (base64.Decode (encodesource.getBytes (), base64.default)); / * * Javase/javaee */// sun.misc.base64decoder // intenta {// base64Decoder decoder = new Base64Decoder (); // devuelve nueva cadena (decoder.decodeBuffer (encodesource)); //} Catch (ioException e) {// tirar nueva runtimeException (e); //} // org.apache.commons.codec.binary.base64 // devuelve nueva cadena (base64.DecodeBase64 (encodesource.getBytes ())); }/*** Cifrado AES* @param Contenido Contenido se encriptará* @param contraseña encriptación contraseña* @return*/public static byte [] cifryptbitaes (byte [] content, string contraseña) {try {cipher cipher ciPhipher = cipher.getinstance ("aes/ecb/pkcs5padding"); // cifryptcipher.init (cipher.encrypt_mode, getKey (contraseña)); // inicializar byte [] resultado = cifryptcipher.dofinal (contenido); resultado de retorno; // CiCrypt} Catch (nosuchalgorithmexception e) {E.PrintStackTrace (); } Catch (nosuchpaddingException e) {E.PrintStackTrace (); } catch (InvalidKeyException e) {E.PrintStackTrace (); } catch (ilegalBlockSizeException e) {E.PrintStackTrace (); } catch (BadPaddingException e) {E.PrintStackTrace (); } return null; }/*** AES DECRYPT* @Param Content Content se descifrará* @param Password Decrypt Key* @return*/public static byte [] descryptbitaes (byte [] content, string contraseña) {try {cipher decryptcipher = cipher.getInstance ("aes/ecb/pkcs5padding"); DecryptCipher.init (cipher.decrypt_mode, getKey (contraseña)); // inicializar byte [] resultado = Decryptcipher.dofinal (contenido); resultado de retorno; // Resultado en cifrado} Catch (InvalidKeyException e) {E.PrintStackTrace (); } Catch (nosuchalgorithMexception e) {E.PrintStackTrace (); } Catch (nosuchpaddingException e) {E.PrintStackTrace (); } catch (ilegalBlockSizeException e) {E.PrintStackTrace (); } catch (BadPaddingException e) {E.PrintStackTrace (); } return null; } / *** Cifrado de cadena AES* @Param Content Content se encriptará* @param contraseña encriptación contraseña* @return* / public static string encryptaes (contenido de cadena, contraseña de cadena) {return byte2hexstr (cifryptbitaes (content.getBytes (), contraseña)); } / *** AES String Decryption* @param Content Content se descifrará* @param contraseña Decrypt Key* @return* / public static String Decryptaes (String Content, String Password) {return New String (DecryPtBitAes (hexStr2Bytes (contenido), contraseña)); } / *** Genere la clave a partir de la cadena especificada* @param contraseña La cadena que constituye la clave* @return la clave generada* @throws nosuchalgorithMexexception* / private static key getKey (cadena contraseña) lanza NosuchalgorithMexexception {SecureRandom Secureandom = new Secureandom (contraseña.getbybybytes ()); // Generar clave keyGenerator kgen = keyGenerator.getInstance ("AES"); kgen.init (128, SecureRandom); SecretKey SecretKey = Kgen.GenerateKey (); byte [] encodeFormat = SecretKey.getEncoded (); // Convertir la tecla SecretKeySpec Key = new SecretKeSpec (EncodeFormat, "AES"); tecla de retorno; } /*** Convierta la matriz de bytes en una cadena que representa los valores hexadecimales. * Por ejemplo: byte [] {8,18} a: 0812 * y byte [] hexstr2bytes (strin strin) son procesos de conversión mutuamente reversibles. * @param bytes la matriz de bytes que debe convertirse* @return la cadena convertida*/ public static string byte2HexStr (byte [] bytes) {int byteslen = bytes.length; // Cada byte está representado por dos caracteres, por lo que la longitud de la cadena es el doble de la longitud de la matriz StringBuffer HexString = new StringBuffer (byteslen * 2); para (int i = 0; i <byteslen; i ++) {// Realizar cada byte con 0xff, luego conviértelo a decimal y luego conviértelo a hex por entero. Cadena hex = integer.toHexString (bytes [i] & 0xff); if (hex.length () <2) {hexString.append (0); // Si agrega 0 a 1 bit antes} hexstring.append (hex); } return hexString.ToString (); } /** * Convierta una cadena que representa HexValues en una matriz de bytes, * y String byte2HexStr (byte [] bytes) son procesos de conversión reversibles mutuamente. * @param bytes * @return convertido byte array */ public static byte [] hexstr2bytes (string strin) {byte [] arrb = strin.getbytes (); int ilen = arrb.length; // Dos caracteres representan un byte, por lo que la longitud de la matriz de bytes es la longitud de la cadena dividida por 2 byte [] Arraut = new Byte [ilen / 2]; for (int i = 0; i <ilen; i = i + 2) {string strtmp = new String (arrb, i, 2); Arraut [i / 2] = (byte) integer.ParseInt (strtmp, 16); } regreso Arraout; }}Lo anterior se trata de este artículo, espero que sea útil para todos aprender la programación de Java.