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

Java 加密解密實戰指南:Base64、DES、3DES、AES 完整實現

     編輯:Java 相關知識

常用算法分類

算法類型說明
Base64編碼非加密,可逆轉碼。可加鹽增強安全性。
DES對稱加密56位密鑰,已不安全,被 AES 取代。
3DES對稱加密DES 增強版,三重加密,較慢。
AES對稱加密當前主流標準,性能好、安全性高。

實現依賴

  • JDK 內置 javax.crypto 包。
  • 第三方庫:Bouncy Castle(官網)、Apache Commons Codec(官網)。

完整代碼示例(核心片段)

1. Base64 三種實現


// JDK 內置 (sun.misc 包,不推薦生產使用)
BASE64Encoder encoder = new BASE64Encoder();
String encoded = encoder.encode(src.getBytes());

// Apache Commons Codec (推薦)
byte[] encodedBytes = Base64.encodeBase64(src.getBytes());

// Bouncy Castle
byte[] encodedBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());

2. DES / 3DES / AES 通用模式


// 1. 生成密鑰
KeyGenerator kg = KeyGenerator.getInstance("AES"); // 或 DES, DESede
kg.init(128); // AES 128/192/256; DES 56; 3DES 168
SecretKey sk = kg.generateKey();

// 2. 密鑰轉換 (DES/3DES 需 KeySpec)
SecretKeySpec keySpec = new SecretKeySpec(sk.getEncoded(), "AES"); // AES 直接用

// 3. 加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encrypted = cipher.doFinal(src.getBytes());

// 4. 解密
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decrypted = cipher.doFinal(encrypted);

關鍵參數:算法/模式/填充。示例使用 ECB 模式(不安全,生產建議 CBC/GCM + IV)。

3. 固定密鑰生成(可復現)


kg.init(128, new SecureRandom("seedseedseed".getBytes())); // 固定種子

完整工程代碼結構

文中提供四個完整類:Base64Demo、DESDemo、TripleDESDemo、AESDemo,每類含 JDK 實現與 Bouncy Castle 實現雙版本,異常處理完整。

安全建議

  • 優先使用 AES-GCM 或 ChaCha20-Poly1305(認證加密)。
  • 避免 ECB 模式,使用 CBC + 隨機 IV 或 GCM。
  • 密鑰管理使用專用 KMS,勿硬編碼。
  • Base32/Base64 僅用於編碼傳輸,非加密手段。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved