ZBLOG

java里使用SecretKey 进行加解密

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

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

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AesEncryptionExample {
    public static void main(String[] args) throws Exception {
        // 生成 SecretKey
        SecretKey secretKey = generateSecretKey();
        
        // 待加密的文本
        String originalText = "Hello, World!";
        
        // 加密
        String encryptedText = encrypt(originalText, secretKey);
        System.out.println("Encrypted Text: " + encryptedText);
        
        // 解密
        String decryptedText = decrypt(encryptedText, secretKey);
        System.out.println("Decrypted Text: " + decryptedText);
    }

    public static SecretKey generateSecretKey() throws Exception {
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(128); // 可以选择 128, 192 或 256 位长的 AES 密钥
        return keyGen.generateKey();
    }

    public static String encrypt(String plainText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
        
        // 将字节数组转换为 Base64 编码字符串以便于传输
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String encryptedText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
        
        return new String(decryptedBytes);
    }
}

代码解释

  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

注册

已经有帐号?