javaServlet封装AES的加密类

渡星河
2023-02-16 / 0 评论 / 11 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年02月16日,已超过579天没有更新,若内容或图片失效,请留言反馈。

Java Servlet 可以封装常用的加密类,以实现对用户数据的保护。以下是一个简单的加密类封装示例:

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

public class EncryptionUtils {
    // 算法名
    private static final String ALGORITHM_NAME = "AES";
    // 填充方式
    private static final String ALGORITHM_PADDING = "AES/CBC/PKCS5Padding";
    // 加密密钥(长度必须是16位)
    private static final String ENCRYPTION_KEY = "0123456789abcdef";
    // 初始向量(长度必须是16位)
    private static final String IV = "0123456789abcdef";

    // 加密字符串
    public static String encrypt(String plaintext) {
        try {
            SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME);
            Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING);
            IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8"));
            cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec);
            byte[] encrypted = cipher.doFinal(plaintext.getBytes("UTF-8"));
            return Base64.getEncoder().encodeToString(encrypted);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    // 解密字符串
    public static String decrypt(String ciphertext) {
        try {
            SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME);
            Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING);
            IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8"));
            cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec);
            byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(ciphertext));
            return new String(decrypted, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

这个类中使用了 Java 中提供的加密类库,实现了对字符串的加密和解密操作。加密方法使用 AES 算法对字符串进行加密,加密后的密文使用 Base64 编码。解密方法则是先使用 Base64 解码,再使用 AES 算法进行解密,最后将解密后的字节数组转换为字符串。

在 Servlet 中使用这个类只需要导入这个类,然后就可以使用其中的加密和解密方法了。例如

String plaintext = "Hello, world!";
String ciphertext = EncryptionUtils.encrypt(plaintext);
System.out.println(ciphertext); // 输出加密后的字符串

String decrypted = EncryptionUtils.decrypt(ciphertext);
System.out.println(decrypted); // 输出解密后的字符串
注意:这个示例中的加密密钥和初始向量都是写死的,实际应用中应该根据具体情况进行修改,不能直接使用这个示例中的值。
1

评论 (0)

取消