首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 加密基石:Base64、MD5、SHA、HMAC 單向加密全解析

     編輯:Java 相關知識

加密技術是資訊安全的基石。本文系統梳理 Java 內建的四大基礎加密組件:Base64 編碼、MD5 摘要、SHA 雜湊、HMAC 消息鑑別碼,構建從數據編碼到完整性驗證的完整知識體系,並提供生產級可用的 Coder 核心類實現。

四大基礎算法定位

  • Base64:嚴格屬於編碼格式而非加密,將二進制數據轉為可打印字符,常用於 HTTP 基礎認證、郵件附件傳輸
  • MD5:生成 128 位摘要,廣泛用於文件完整性校驗(如 ISO 下載驗證),但已被碰撞攻擊破解,不再適合安全敏感場景
  • SHA:安全雜湊算法族(SHA-1/256/384/512),數字簽名核心組件,比 MD5 更安全但 SHA-1 亦存在理論弱點
  • HMAC:基於密鑰的雜湊消息鑑別碼(HmacMD5/HmacSHA1 等),引入密鑰機制強化防篡改能力,適用於 API 簽名驗證

核心類完整實現

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      ← 密鑰相關、防偽造

工程應用指南

  1. 密碼存儲:絕不可用單一 MD5/SHA,必須採用 PBKDF2/bcrypt/Argon2 + 隨機鹽值
  2. 文件校驗:SHA-256 是當前推薦標準,MD5 僅用於非安全場景快速比對
  3. API 防篡改:HMAC-SHA256 + 時間戳 + Nonce 機制,防重放攻擊
  4. 傳輸編碼:Base64 僅解決傳輸兼容性,不提供任何機密性保護
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved