Java 将文本加密到AES/CBC/PKCS7Padding
我正在开发一个web应用程序,用Java6加密一些文本 我要做的加密操作是CBC模式下的AES(Rijndael),带有PKCS7填充和128位密钥 我看了一篇文章,解释了如何以我必须使用的相同方式进行加密,但是使用了PKCS5填充 文章链接如下: 我改变Java 将文本加密到AES/CBC/PKCS7Padding,java,encryption,aes,pkcs#7,Java,Encryption,Aes,Pkcs#7,我正在开发一个web应用程序,用Java6加密一些文本 我要做的加密操作是CBC模式下的AES(Rijndael),带有PKCS7填充和128位密钥 我看了一篇文章,解释了如何以我必须使用的相同方式进行加密,但是使用了PKCS5填充 文章链接如下: 我改变 private final static String cI = "AES/CBC/PKCS5Padding"; 到 但是Java找不到这方面的提供者 有人能告诉我该怎么做吗?Java规范列出了许多需要支持的加密模式(和填充)PKCS7填
private final static String cI = "AES/CBC/PKCS5Padding";
到
但是Java找不到这方面的提供者
有人能告诉我该怎么做吗?Java规范列出了许多需要支持的加密模式(和填充)<不包括代码>PKCS7填充 这些是任何Java实现都必须支持的AES/CBC模式
- AES/CBC/NoPadding(128位密钥)
- AES/CBC/PKCS5P添加(128位密钥)
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;
}
创建安全敏感数据时,请尝试使用最新的JRE。如果您的系统易受攻击,使用AES-256并不意味着什么。当与CBC模式一起使用时,IV必须是不可预测的。如果密钥是硬编码的,并且密钥字节用作IV,那么IV几乎是可预测的。IV不是一个秘密值。您可以随机生成它并将其与密文一起发送给接收者。通常,这是通过在密文前面加上IV来完成的。然后接收器将IV切掉并直接使用它。这是不同的:PKCS7填充“允许块大小最大为255字节”,与PKCS5的“8字节”不同。我应该重新措辞。PKCS5填充对AES无效,但Java仍然提供它,这意味着Java正在撒谎,并且实际上正在使用PKCS7填充,在这种情况下,
PKCS5Padding
和PKCS7Padding
对于所有目的和目的都是相同的。
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;
}