问题
I am developing a web application to encrypt some texts with java 6.
The encrypted that I have to do is a AES (Rijndael) in CBC mode with PKCS7 padding and a 128-bit key.
I saw an article that explains how to encrypt in the same way I have to do, but with PKCS5 padding.
The link of the article is here:
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/
I change
private final static String cI = "AES/CBC/PKCS5Padding";
To
private final static String cI = "AES/CBC/PKCS7Padding";
But Java couldn't find a provider for this.
Could someone tell me how I have to do?
回答1:
Java only provides PKCS#5 padding, but it is the same as PKCS#7 padding. See this question on Crypto.SE:
What is the difference between PKCS#5 padding and PKCS#7 padding
They are interchangeable for the common block ciphers like AES and DES.
回答2:
Try this method
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;
}
回答3:
The Java specification list a number of encryption modes (and paddings) that needs to be supported. PKCS7Padding
is not included.
These are the AES/CBC modes any Java implementation must support.
- AES/CBC/NoPadding (128 bit key)
- AES/CBC/PKCS5Padding (128 bit key)
(See this answer for more information)
Bouncy Castle does however have what you need.
来源:https://stackoverflow.com/questions/29232705/encrypt-text-to-aes-cbc-pkcs7padding