欢迎访问宙启技术站
智能推送

Java中如何实现数据加密和解密,比如AES、DES等常用加密算法的使用方法?

发布时间:2023-10-26 05:42:51

Java中可以通过javax.crypto包中的Cipher类来实现数据加密和解密,常用的加密算法包括AES、DES等。下面是使用AES算法进行数据加密和解密的示例代码:

1. 加密

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class AESEncryptionExample {
    public static void main(String[] args) throws Exception {
        String plainText = "This is the plaintext message.";

        // 生成16字节的密钥
        String key = "0123456789abcdef";

        // 创建AES算法的加密器
        Cipher cipher = Cipher.getInstance("AES");

        // 创建密钥规范
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");

        // 初始化加密器为加密模式,并传入密钥规范
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

        // 执行加密操作
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());

        // 将加密后的结果转换为Base64字符串
        String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);

        System.out.println("加密后的结果:" + encryptedText);
    }
}

2. 解密

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class AESDecryptionExample {
    public static void main(String[] args) throws Exception {
        String encryptedText = "q2KO9JZScb9DcahjYF8UIkdVD3S/FN/bAysKMA9THQA=";

        // 生成16字节的密钥
        String key = "0123456789abcdef";

        // 创建AES算法的解密器
        Cipher cipher = Cipher.getInstance("AES");

        // 创建密钥规范
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");

        // 初始化解密器为解密模式,并传入密钥规范
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

        // 将Base64字符串转换为加密后的字节数组
        byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText);

        // 执行解密操作
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);

        // 将解密后的字节数组转换为明文字符串
        String decryptedText = new String(decryptedBytes);

        System.out.println("解密后的结果:" + decryptedText);
    }
}

上述代码中使用了AES算法进行加密和解密,密钥长度为16字节。通过调用Cipher的init方法设置加密/解密模式和密钥规范,并调用doFinal方法来执行加密/解密操作。加密结果使用Base64进行编码,解密时需要先解码为字节数组再进行解密。

同样的原理也适用于其他常用的加密算法,比如DES。只需将代码中的"AES"替换为"DES"即可。注意,DES算法的密钥长度为8字节。

需要注意的是,加密和解密过程中需要保证密钥的安全性,可以将密钥保存在安全的地方。此外,还可以考虑对数据进行签名验证,以确保数据的完整性和真实性。