将文本加密为 AES/CBC/PKCS7 填充

2022-09-04 06:02:29

我正在开发一个Web应用程序,用java 6加密一些文本。

我必须做的加密是CBC模式下的AES(Rijndael),带有PKCS7填充和128位密钥。

我看到一篇文章解释了如何以我必须做的相同方式进行加密,但使用PKCS5填充。

文章的链接在这里:

https://bit502.wordpress.com/2014/06/27/codigo-java-encriptar-y-desencriptar-texto-usando-el-algoritmo-aes-con-cifrado-por-bloques-cbc-de-128-bits/

我改变

private final static String cI = "AES/CBC/PKCS5Padding";

private final static String cI = "AES/CBC/PKCS7Padding";

但是Java找不到这方面的提供者。

有人可以告诉我该怎么做吗?


答案 1

Java只提供PKCS#5填充,但它与PKCS#7填充相同。在 Crypto.SE 上看到这个问题:

PKCS#5 填充和 PKCS#7 填充有什么区别

它们可以互换用于常见的分组密码,如AES和DES。


答案 2

试试这个方法

String KEY_AES = "**************";
public String encrypt(String value) {
        try {
            byte[] key = KEY_AES.getBytes("UTF-8");
            byte[] ivs = KEY_AES.getBytes("UTF-8");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
            AlgorithmParameterSpec paramSpec = new IvParameterSpec(ivs);
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, paramSpec);
            return Base64.encodeToString(cipher.doFinal(value.getBytes("UTF-8")), Base64.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

推荐