将文本加密为AES / CBC / PKCS7Padding

我正在开发一个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-比特/

我改变

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

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

但Java无法为此找到提供商。

有人能告诉我怎么做吗?

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

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

它们可以与AES和DES等公共分组密码互换。

Java规范列出了需要支持的多种加密模式(和填充)。 PKCS7Padding不包括在内。

这些是任何Java实现必须支持的AES / CBC模式。

  • AES / CBC / NoPadding(128位密钥)
  • AES / CBC / PKCS5Padding(128位密钥)

(有关更多信息,请参阅此答案 )

然而, Bouncy Castle确实拥有您所需要的一切。

试试这个方法

 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; }