AES-256和PKCS7Padding在Java中失败
我有几个库,C#,PHP和Android,它们都以相同的方式加密/解密字符串,因此它们彼此兼容,即C#将数据写入和加密到数据库中,PHP可以成功解密并返回原始字符串。
现在,我需要对标准Java应用程序执行相同的操作,因此我已经从Android库中获取了代码,并且需要库,但是却遇到了异常。据我所知,代码不是特定于Android的,因此应该不是问题。
下面是我的加密功能
public static String encrypt(String plainPasword) {
String password = "";
try
{
SecretKeySpec key = new SecretKeySpec("hcxilkqbbhczfeultgbskdmaunivmfuo".getBytes("US-ASCII"), "AES");
IvParameterSpec iv = new IvParameterSpec("ryojvlzmdalyglrj".getBytes("US-ASCII"));
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encoded = cipher.doFinal(plainPasword.getBytes());
password = new String(Base64.encodeBase64(encoded));
}
catch (Exception ex)
{
System.err.println("Encryption Exception: " + ex.toString());
}
return password;
}
当我打电话时Encryption.encrypt("myString")
,出现以下异常:
Encryption Exception: java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Padding
就像我说的那样,这段代码在Android上运行良好,在运行时应该没有任何区别。
回答:
由于评论链接,我发现我需要PKCS5Padding而不是7。我现在虽然遇到以下异常:
Encryption Exception: java.security.InvalidKeyException: Illegal key size
回答:
首先,在Java中,标准的填充名称是PKCS5Padding,而不是PKCS7Padding。Java实际上正在执行PKCS#7填充,但是在JCA规范中,PKCS5Padding是给定的名称。
接下来,您尝试使用AES-256,因此您将需要安装Unlimited Strength
Jurisdiction策略文件。
希望这只是一个例子,您不会对每条消息都使用相同的IV,对吗?
以上是 AES-256和PKCS7Padding在Java中失败 的全部内容, 来源链接: utcz.com/qa/405793.html