This example shares a Java encryption and decryption tool suitable for JavaSE/JavaEE/Android for everyone to learn. The specific content is as follows
package longshu.utils.security; import java.lang.reflect.Method;import java.security.InvalidKeyException;import java.security.Key;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom; 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 javax.crypto.spec.SecretKeySpec; /** * Java encryption and decryption tool. * Both JavaSE/JavaEE/Android are applicable* * @author longshu April 13, 2016*/public class EncryptDecrypt { // No need to create an object private EncryptDecrypt() { } /** * SHA1 encrypted Bit data* @param source byte array* @return Encrypted byte array*/ public static byte[] SHA1Bit(byte[] source) { try { MessageDigest sha1Digest = MessageDigest.getInstance("SHA-1"); sha1Digest.update(source); byte targetDigest[] = sha1Digest.digest(); return targetDigest; } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } /** * SHA1 encrypted string data* @param source string to be encrypted* @return Encrypted string*/ public static String SHA1(String source) { return byte2HexStr(SHA1Bit(source.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"); // Update the digest md5Digest.update(source); // Get the ciphertext return md5Digest.digest(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } /** * MD5 encrypted string, 32-bit long* @param source Content to be encrypted* @return Encrypted content*/ public static String MD5(String source) { return byte2HexStr(MD5Bit(source.getBytes())); } /** * BASE64 encoding* @param source string to be encoded* @return Encoded string*/ public static String encodeBASE64(String source) { Class<?> clazz = null; Method encodeMethod = null; try {// Priority use of third-party libraries 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); // The static method of the reflection method does not require an object to execute return new String((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); return new String((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(source, Base64.DEFAULT); // return new String(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 decoding* @param encodeSource EncodeSource EncodeSource* @return String before encoding*/ public static String decodeBASE64(String encodeSource) { Class<?> clazz = null; Method decodeMethod = null; try {// Priority use of third-party libraries 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); // Execute static methods of reflection method without object return new String((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); 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; } } 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(); // return new String(decoder.decodeBuffer(encodeSource)); // } catch (IOException e) { // throw new RuntimeException(e); // } // org.apache.commons.codec.binary.Base64 // return new String(Base64.decodeBase64(encodeSource.getBytes())); } /** * AES encryption* @param content Content to be encrypted* @param password Encryption password* @return */ public static byte[] encryptBitAES(byte[] content, String password) { try { Cipher encryptCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// Create a password encryptCipher.init(Cipher.ENCRYPT_MODE, getKey(password));// Initialize byte[] result = encryptCipher.doFinal(content); return result; // Encrypt} catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return null; } /** * AES decrypt* @param content Content to be decrypted* @param password Decrypt key* @return */ public static byte[] decryptBitAES(byte[] content, String password) { try { Cipher decryptCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// Create password decryptCipher.init(Cipher.DECRYPT_MODE, getKey(password));// Initialize byte[] result = decryptCipher.doFinal(content); return result; // Encrypt result} catch (InvalidKeyException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return null; } /** * AES string encryption* @param content Content to be encrypted* @param password Encryption password* @return */ public static String encryptAES(String content, String password) { return byte2HexStr(encryptBitAES(content.getBytes(), password)); } /** * AES string decryption* @param content Content to be decrypted* @param password Decrypt key* @return */ public static String decryptAES(String content, String password) { return new String(decryptBitAES(hexStr2Bytes(content), password)); } /** * Generate key from the specified string* @param password The string that constitutes the key* @return The generated key* @throws NoSuchAlgorithmException */ private static Key getKey(String password) throws NoSuchAlgorithmException { SecureRandom secureRandom = new SecureRandom(password.getBytes()); // Generate KEY KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, secureRandom); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); // Convert KEY SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); return key; } /** * Convert the byte array to a string representing hexadecimal values. * For example: byte[]{8,18} to: 0812 * and byte[] hexStr2Bytes(String strIn) are mutually reversible conversion processes. * @param bytes The byte array that needs to be converted* @return The converted string*/ public static String byte2HexStr(byte[] bytes) { int bytesLen = bytes.length; // Each byte is represented by two characters, so the length of the string is twice the length of the array StringBuffer hexString = new StringBuffer(bytesLen * 2); for (int i = 0; i < bytesLen; i++) { // Perform each byte with 0xFF, then convert it to decimal, and then convert it to hex by Integer. String hex = Integer.toHexString(bytes[i] & 0xFF); if (hex.length() < 2) { hexString.append(0);// If you add 0 to 1 bit before } hexString.append(hex); } return hexString.toString(); } /** * Convert a string representing hexvalues to a byte array, * and String byte2HexStr(byte[] bytes) are mutually reversible conversion processes. * @param bytes * @return Converted byte array*/ public static byte[] hexStr2Bytes(String strIn) { byte[] arrB = strIn.getBytes(); int iLen = arrB.length; // Two characters represent a byte, so the length of the byte array is the string length divided by 2 byte[] arrOut = 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); } return arrOut; } }The above is all about this article, I hope it will be helpful for everyone to learn Java programming.