ZBLOG

java里使用SecretKey 进行加解密

在Java中,可以使用 SecretKey 进行对称加密和解密。下面是一个使用 AES(高级加密标准)进行加密和解密的示例。该示例展示了如何生成一个 SecretKey,以及如何使用该密钥进行数据的加解密。

使用AES进行对称加密和解密的Java示例

  1. import javax.crypto.Cipher;
  2. import javax.crypto.KeyGenerator;
  3. import javax.crypto.SecretKey;
  4. import javax.crypto.spec.SecretKeySpec;
  5. import java.util.Base64;
  6. public class AesEncryptionExample {
  7. public static void main(String[] args) throws Exception {
  8. // 生成 SecretKey
  9. SecretKey secretKey = generateSecretKey();
  10. // 待加密的文本
  11. String originalText = "Hello, World!";
  12. // 加密
  13. String encryptedText = encrypt(originalText, secretKey);
  14. System.out.println("Encrypted Text: " + encryptedText);
  15. // 解密
  16. String decryptedText = decrypt(encryptedText, secretKey);
  17. System.out.println("Decrypted Text: " + decryptedText);
  18. }
  19. public static SecretKey generateSecretKey() throws Exception {
  20. KeyGenerator keyGen = KeyGenerator.getInstance("AES");
  21. keyGen.init(128); // 可以选择 128, 192 或 256 位长的 AES 密钥
  22. return keyGen.generateKey();
  23. }
  24. public static String encrypt(String plainText, SecretKey secretKey) throws Exception {
  25. Cipher cipher = Cipher.getInstance("AES");
  26. cipher.init(Cipher.ENCRYPT_MODE, secretKey);
  27. byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
  28. // 将字节数组转换为 Base64 编码字符串以便于传输
  29. return Base64.getEncoder().encodeToString(encryptedBytes);
  30. }
  31. public static String decrypt(String encryptedText, SecretKey secretKey) throws Exception {
  32. Cipher cipher = Cipher.getInstance("AES");
  33. cipher.init(Cipher.DECRYPT_MODE, secretKey);
  34. byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
  35. return new String(decryptedBytes);
  36. }
  37. }

代码解释

  1. 生成 SecretKey

    • 使用 KeyGenerator 类来创建一个 AES 类型的 SecretKey
    • keyGen.init(128) 指定生成128位长的 AES 密钥。
  2. 加密方法

    • 创建一个 Cipher 实例,并初始化为加密模式。
    • 调用 doFinal() 方法,对明文进行加密,并返回字节数组。
    • 使用 Base64 编码将字节数组转换成字符串,以便于存储或传输。
  3. 解密方法

    • 创建另一个 Cipher 实例并初始化为解密模式。
    • 解码 Base64 字符串,得到原始字节数组,然后调用 doFinal() 方法进行解密。

注意事项

  • 确保你的 Java 环境支持适当长度的 AES 密钥。如果你希望使用 256 位长的 AES 密钥,请确保安装了无限制强度策略文件。
  • 在实际应用中,建议不要直接硬编码秘钥,而是通过安全方式管理和存储秘钥,比如使用环境变量、专门的秘钥管理服务等。
  • 不要重复使用同一秘钥处理大量数据,为每次会话或数据交换生成新的随机秘钥,并通过安全通道传递。

如果您有其他问题或需要进一步的信息,请告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20515

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?