加密技術是資訊安全的基石。本文系統梳理 Java 內建的四大基礎加密組件:Base64 編碼、MD5 摘要、SHA 雜湊、HMAC 消息鑑別碼,構建從數據編碼到完整性驗證的完整知識體系,並提供生產級可用的 Coder 核心類實現。
public abstract class Coder {
public static final String KEY_SHA = "SHA";
public static final String KEY_MD5 = "MD5";
public static final String KEY_MAC = "HmacMD5";
// Base64 雙向編解碼
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
public static String encryptBASE64(byte[] key) throws Exception {
return (new BASE64Encoder()).encodeBuffer(key);
}
// MD5/SHA 單向雜湊
public static byte[] encryptMD5(byte[] data) throws Exception {
MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
md5.update(data);
return md5.digest();
}
public static byte[] encryptSHA(byte[] data) throws Exception {
MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
sha.update(data);
return sha.digest();
}
// HMAC 密鑰生成與加密
public static String initMacKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);
SecretKey secretKey = keyGenerator.generateKey();
return encryptBASE64(secretKey.getEncoded());
}
public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return mac.doFinal(data);
}
}
測試類驗證了各算法特性,控制台輸出展示關鍵差異:
原文: 簡單加密
BASE64加密後: 566A5Y2V5Yqg5a+G
BASE64解密後: 簡單加密 ← 可逆特性
Mac密鑰: uGxdHC+6ylRDaik++leFtGwiMbuYUJ6mqHWyhSgF4trVkVBBSQvY/a22xU8XT1RUemdCWW155BkepBIpkd7QHg==
MD5: -550b4d90349ad4629462113e7934de56 ← 固定長度、不可逆
SHA: 91k9vo7p400cjkgfhjh0ia9qthsjagfn ← 更長摘要、更強抗碰撞
HMAC: 2287d192387e95694bdbba2fa941009a ← 密鑰相關、防偽造