MD5 加密解密類(通過Key 對資料進行加密)直接複製使用
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;
public class AesUtil { private static final String defaultCharset = "UTF-8"; private static final String KEY_AES = "AES"; private static final String KEY_MD5 = "MD5";
private static MessageDigest md5Digest; static { try { md5Digest = MessageDigest.getInstance(KEY_MD5); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } }
/** * 加密 * @param data * @param key * @return */ public static String encrypt(String data, String key) { return doAES(data, key, Cipher.ENCRYPT_MODE); } /** * 解密 * @param data * @param key * @return */ public static String decrypt(String data, String key) { return doAES(data, key, Cipher.DECRYPT_MODE); }
private static String doAES(String data, String key, int mode) { try { boolean encrypt = mode == Cipher.ENCRYPT_MODE; byte[] content; //true 加密內容 false 解密內容 if (encrypt) { content = data.getBytes(defaultCharset); } else { content = parseHexStr2Byte(data); } SecretKeySpec keySpec = new SecretKeySpec(md5Digest.digest(key.getBytes(defaultCharset)), KEY_AES);//構造一個金鑰 Cipher cipher = Cipher.getInstance(KEY_AES);// 建立密碼器 cipher.init(mode, keySpec);// 初始化 byte[] result = cipher.doFinal(content);//加密或解密 if (encrypt) { return parseByte2HexStr(result); } else { return new String(result, defaultCharset); } } catch (Exception e) { e.printStackTrace(); } return null; }
public static String parseByte2HexStr(byte buf[]) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < buf.length; i++) { String hex = Integer.toHexString(buf[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } sb.append(hex.toUpperCase()); } return sb.toString(); } /** * 將16進位制轉換為二進位制 * * @param hexStr * @return */ public static byte[] parseHexStr2Byte(String hexStr) { if (hexStr.length() < 1) { return null; } byte[] result = new byte[hexStr.length() / 2]; for (int i = 0; i < hexStr.length() / 2; i++) { int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16); int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16); result[i] = (byte) (high * 16 + low); } return result; }
public static void main(String[] args) throws Exception {
String content = "{\"userNo\":\"000000000001\"}"; String key = "123456";
System.out.println("加密前:" + content);
String encrypt = encrypt(content, key);
System.out.println("加密後:" + encrypt);
String decrypt = decrypt(encrypt, key);
System.out.println("解密後:" + decrypt); }
}