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

Java中如何使用函数进行加密和解密字符串?

发布时间:2023-07-20 14:34:11

在Java中,可以使用各种加密算法来加密和解密字符串。以下是一种常见方法,使用AES算法进行加密和解密。

加密过程:

1. 导入相关的Java库:javax.crypto.Cipher和javax.crypto.spec.SecretKeySpec。

2. 创建一个密钥Key,可以使用SecretKeySpec类和一个预定义的密钥字节数组来实现。

3. 创建一个Cipher对象,指定使用AES加密算法。

4. 初始化Cipher对象,将其设置为加密模式,并使用密钥进行初始化。

5. 使用Cipher的doFinal方法,传入待加密的字符串的字节数组作为参数,得到加密后的字节数组。

6. 将字节数组转换为Base64编码的字符串,以方便传输和存储。

解密过程:

1. 导入相关的Java库:javax.crypto.Cipher和javax.crypto.spec.SecretKeySpec。

2. 创建一个密钥Key,可以使用SecretKeySpec类和一个预定义的密钥字节数组来实现。

3. 创建一个Cipher对象,指定使用AES加密算法。

4. 初始化Cipher对象,将其设置为解密模式,并使用密钥进行初始化。

5. 将Base64编码的加密字符串解码为字节数组。

6. 使用Cipher的doFinal方法,传入待解密的字节数组作为参数,得到解密后的字节数组。

7. 将字节数组转换为字符串,即为解密后的结果。

下面是一个简单的示例代码,演示如何使用函数进行加密和解密字符串:

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

public class EncryptionUtils {

    private static final String KEY = "1234567890123456"; // 密钥,需要16位

    public static String encrypt(String data) throws Exception {
        SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String encryptedData) throws Exception {
        SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedBytes);
    }

    public static void main(String[] args) {
        try {
            String originalData = "Hello, World!";
            System.out.println("原始数据:" + originalData);

            String encryptedData = encrypt(originalData);
            System.out.println("加密后:" + encryptedData);

            String decryptedData = decrypt(encryptedData);
            System.out.println("解密后:" + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

以上代码使用AES算法对字符串进行加密和解密,并输出结果。请注意,密钥需要16位长度,可以根据实际需求修改。