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

Java DES 加解密算法完整實現與原理解析

     編輯:Java 相關知識

算法背景

  • DES:56 位密鑰 + 8 位校驗,64 位分組,16 輪 Feistel 結構
  • 1999 年 NIST 限制僅用於遺留系統,現推薦 AES
  • 3DES (DESede):三次 DES,有效密鑰長度 112 位,兼容性較好

JDK 支持參數

項目值
密鑰長度56 位 (DES) / 112/168 位 (3DES)
模式ECB/CBC/PCBC/CTR/CTS/CFB/OFB 等
填充NoPadding/PKCS5Padding/ISO10126Padding

加密工具類

public class DesCoder {
    private static final String ALGO = "DES";
    private static final SecureRandom RANDOM = new SecureRandom();

    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        DESKeySpec dks = new DESKeySpec(key);
        SecretKeyFactory kf = SecretKeyFactory.getInstance(ALGO);
        SecretKey sk = kf.generateSecret(dks);
        Cipher cipher = Cipher.getInstance(ALGO);
        cipher.init(Cipher.ENCRYPT_MODE, sk, RANDOM);
        return cipher.doFinal(data);
    }

    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        DESKeySpec dks = new DESKeySpec(key);
        SecretKeyFactory kf = SecretKeyFactory.getInstance(ALGO);
        SecretKey sk = kf.generateSecret(dks);
        Cipher cipher = Cipher.getInstance(ALGO);
        cipher.init(Cipher.DECRYPT_MODE, sk, RANDOM);
        return cipher.doFinal(data);
    }

    // 十六進制字符串轉換輔助
    public static String toHex(byte[] b) { ... }
    public static byte[] fromHex(String s) { ... }
}

3DES 升級建議

// 僅需將算法名改為 "DESede",密鑰長度 24 字節 (168 位)
Cipher.getInstance("DESede/CBC/PKCS5Padding");

安全提醒

  • ECB 模式不安全(相同明文產生相同密文),生產環境必須用 CBC + 隨機 IV
  • 密鑰管理:勿硬編碼,使用密鑰管理系統或環境變量
  • 新項目優先選擇 AES-256-GCM
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved