Este exemplo compartilha uma ferramenta de criptografia e descriptografia Java adequada para Javase/Javaee/Android para que todos aprendam. O conteúdo específico é o seguinte
pacote longshu.utils.security; importar java.lang.reflect.method; importar java.security.InValidKeyException; importar java.security.key; importar java.security.messagedigest; importar java.Security.NosuchalGorithMexception; importar java.Security.Securgress; importar javax.crypto.badpaddingException; importar javax.crypto.cipher; importar javax.crypto.illegalblocksizeException; importar javax.crypto.keygenerator; import javax.crypto.nosuchPaddingException; import javax.cryspto; javax.crypto.spec.secretkeyspec; /*** Ferramenta de criptografia e descriptografia Java. * Javase/Javaee/Android são aplicáveis** @Author Longshu 13 de abril de 2016*/Classe pública EncryptDecrypt {// Não é necessário criar um objeto privado EncryptDecrypt () {}/** *** ShA1 Encrypted Bit Data* @param fontes de fonte* @return fonte) {tente {Messagedigest sha1Digest = Messagedigest.getInstance ("sha-1"); sha1digest.Update (fonte); BYTE TargetDigest [] = SHA1Digest.Digest (); retornar TargetDigest; } catch (nosuchalgorithMexception e) {lança nova runtimeException (e); }} / *** SHA1 Dados da string criptografada* @param String de origem a ser criptografada* @return string criptografada* / public static string sha1 (string fonte) {return byte2hexstr (sha1bit (fonte.getBytes ()); } / *** MD5 Dados de bits criptografados* @param Fonte Byte Array* @return Matriz de byte criptografada* / public static byte [] md5bit (byte [] fonte) {try {// obtenha o objeto MessagestEst do Md5 Digesterin ALGORINGM Messagerin Message // Atualize o Digest Md5Digest.Update (Origem); // Obtenha o CipherText Return md5digest.digest (); } catch (nosuchalgorithMexception e) {lança nova runtimeException (e); }} / *** MD5 String criptografada, conteúdo de origem de 32 bits* @param a ser criptografado* @return Conteúdo criptografado* / public static string md5 (string fonte) {return byte2hexstr (md5bit (fonte.getBytes ())); } / *** base64 codificação* @param string de origem a ser codificada* @return codificado string* / public static string codeBase64 (string fonte) {class <?> Clazz = null; Método codemethod = null; tente {// Uso prioritário de bibliotecas de terceiros clazz = classe.ForName ("org.apache.commons.codec.binary.base64"); codemethod = clazz.getMethod ("codeBase64", byte []. classe); System.out.println ("EncodeBase64->" + clazz); System.out.println ("codemethod->" + codemethod); // O método estático do método de reflexão não requer um objeto para executar o retorno nova string ((byte []) codemethod.invoke (null, fonte.getBytes ())); } catch (classNotFoundException e) {String vm = System.getProperty ("java.vm.name"); System.out.println (VM); tente {if ("dalvik" .equals (vm)) {// Android clazz = classe.formane ("android.util.base64"); // byte [] base64.encode (byte [] entrada, int sinalizadores) codemethod = clazz.getMethod ("cody", byte []. classe, int.class); System.out.println ("EncodeBase64->" + clazz); System.out.println ("codemethod->" + codemethod); Retornar nova String ((byte []) codemethod.invoke (null, fonte.getBytes (), 0)); } else {// javase/javaee clazz = classe.ForName ("Sun.misc.Base64Encoder"); codemethod = clazz.getMethod ("Encode", byte []. Classe); System.out.println ("EncodeBase64->" + clazz); System.out.println ("codemethod->" + codemethod); return (string) codemethod.invoke (clazz.newinstance (), fonte.getBytes ()); }} catch (classNotFoundException e1) {return null; } catch (Exceção E1) {return null; }} catch (Exceção e) {return null; } / * * Android * Android.util.base64 * / // retorna base64.EncodetoString (fonte, base64.Default); // retorna new string (base64.encode (fonte.getBytes (), base64.Default)); / * * Javase/javaee */// sun.misc.base64Encoder // base64Encoder codificador = new base64Encoder (); // return coder.encode (fonte.getBytes ()); // org.apache.commons.codec.binary.base64 // retorna new string (base64.encodeBase64 (fonte.getBytes ())); } / *** Base64 Decodificação* @param codesource codesource codesource* @return string antes de codificar* / public static string decodeBase64 (string codesource) {class <?> Clazz = null; Método decodemethod = null; tente {// Uso prioritário de bibliotecas de terceiros clazz = classe.ForName ("org.apache.commons.codec.binary.base64"); decodemethod = clazz.getMethod ("decodeBase64", byte []. classe); System.out.println ("decodeBase64->" + clazz); System.out.println ("decodemethod->" + decodemethod); // Executa métodos estáticos do método de reflexão sem retorno de objeto New String ((byte []) decodemethod.invoke (null, codesource.getBytes ())); } catch (classNotFoundException e) {String vm = System.getProperty ("java.vm.name"); System.out.println (VM); tente {if ("dalvik" .equals (vm)) {// Android clazz = classe.formane ("android.util.base64"); // byte [] base64.decode (byte [] entrada, int sinalizadores) decodemethod = clazz.getMethod ("decodificar", byte []. classe, int.class); System.out.println ("decodeBase64->" + clazz); System.out.println ("decodemethod->" + decodemethod); retornar nova string ((byte []) decodemethod.invoke (null, codesource.getBytes (), 0)); } else {// javase/javaee clazz = classe.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 (), codesource)); }} catch (classNotFoundException e1) {return null; } catch (Exceção E1) {return null; }} catch (Exceção e) {return null; } / * * Android * Android.util.base64 * / // retorna new // string (base64.decode (codesource.getbytes (), base64.default)); / * * Javase/javaee */// sun.misc.base64decoder // try {// base64decoder decodificador = new base64Decoder (); // retorna new string (decoder.DecodeBuffer (codesource)); //} catch (ioexception e) {// lança nova runtimeException (e); //} // org.apache.commons.codec.binary.base64 // retorna new string (base64.decodeBase64 (codesource.getBytes ())); }/*** AES CRYPTION* @PARAM Conteúdo do conteúdo a ser criptografado* @param senha senha de criptografia Senha* @return*/public static byte [] Encryptbitaes (byte [] content, string senha) {Try {cipher Encryptcipher = cipher.getInstance ("Aes/ecbb/cifra EncryptCipher.init (cipher.encrypt_mode, getKey (senha)); // inicialize byte [] resultado = EncryptCipher.dofinal (content); resultado de retorno; // Encrypt} 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 (); } retornar nulo; }/*** Aes descriptografar* @param Conteúdo do conteúdo a ser descriptografado* @param senha Decriptografar a chave* @return*/public static byte [] decryptbitaes (byte [] content, string senha) {tente {cifra decryptcipher = cipher.getInstance ("aes/ecb/grodb/grodbccps5" cifra) decryptcipher.init (cipher.decrypt_mode, getKey (senha)); // inicialize byte [] resultado = decryptcipher.dofinal (content); resultado de retorno; // Encrypt Result} 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 (); } retornar nulo; } / *** Aes String CRYPTION* @PARAM Conteúdo do conteúdo a ser criptografado* @param senha senha de criptografia* @return* / public static string Encryptaes (conteúdo da string, string senha) {return byte2hexstr (EncryptBitaes (content.getBytes (), senha)); } / *** Aes String Decripção* @param Conteúdo do conteúdo a ser descriptografado* @param senha Decriptua a chave* @return* / public static string descriptoes (conteúdo da string, string senha) {retorna new String (DecryptBitaes (hexstr2bytes (conteúdo), senha)); } / *** Gere a chave a partir da sequência especificada* @param senha A sequência que constitui a chave* @return the scort gerada* @throws nosuchalgorithMexception* / key estático privado getKey (string senha) lança NosuchalgorithMexception {securário e o cercendendom = novo e senha (senha. // gera chave KeyGenerator kgen = keyGenerator.getInstance ("AES"); kgen.init (128, SecureRandom); SecretKey SecretKey = KGen.GenerateKey (); byte [] EncodeFormat = secretKey.getEncoded (); // Converter Key SecretKeyspec Key = new SecretKeyspec (EncodEformat, "Aes"); chave de retorno; } /*** Converta a matriz de bytes em uma string representando valores hexadecimais. * Por exemplo: byte [] {8,18} para: 0812 * e byte [] hexstr2bytes (strin strin) são processos de conversão mutuamente reversíveis. * @param bytes A matriz de bytes que precisa ser convertida* @return the String convertida*/ public static string byte2hexstr (byte [] bytes) {int byteslen = bytes.length; // Cada byte é representado por dois caracteres; portanto, o comprimento da string é o dobro do comprimento do array stringbuffer hexstring = new StringBuffer (byteslen * 2); for (int i = 0; i <byteslen; i ++) {// execute cada byte com 0xff, depois converta -o para decimal e depois converta -o em hexadecimal por número inteiro. String hex = Integer.toHexString (bytes [i] e 0xff); if (hex.length () <2) {hexstring.append (0); // se você adicionar 0 a 1 bit antes} hexstring.append (hex); } retornar hexstring.toString (); } /** * Converta uma sequência representando hexvalues em uma matriz de bytes, * e string byte2hexstr (byte [] bytes) são processos de conversão mutuamente reversíveis. * @param bytes * @return Matriz de bytes convertidos */ public static byte [] hexstr2bytes (strin strin) {byte [] arrb = strin.getBytes (); int ilen = arrb.length; // Dois caracteres representam um byte; portanto, o comprimento da matriz de bytes é o comprimento da string dividido por 2 byte [] arout = new Byte [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); } retornar Arrout; }}O exposto acima é tudo sobre este artigo, espero que seja útil para todos aprenderem a programação Java.