Java BadPaddingException解决方案
我不知道为什么在android studio和netbean中使用相同的代码时,行为会有所不同。我试图在android studio中使用RSA算法编写脚本并在netbean中解密,但解密不起作用。 它抛出了一个BadPadding异常,但在android中使用相同的输入,解密工作正常 Android studio NetbeanJava BadPaddingException解决方案,java,android,rsa,Java,Android,Rsa,我不知道为什么在android studio和netbean中使用相同的代码时,行为会有所不同。我试图在android studio中使用RSA算法编写脚本并在netbean中解密,但解密不起作用。 它抛出了一个BadPadding异常,但在android中使用相同的输入,解密工作正常 Android studio Netbean 有人能帮我吗?在您的“解密”方法中,当您调用cipher.init(…)时,您需要包含类型为OAEPParameterSpec的必要第三个参数 密码类的文档: 我怀疑
有人能帮我吗?在您的“解密”方法中,当您调用
cipher.init(…)
时,您需要包含类型为OAEPParameterSpec
的必要第三个参数
密码类的文档:
我怀疑如果您在Netbeans中加密,在Android Studio中解密,也会发生同样的异常。不幸的是,OAEP操作中的某些默认值在不同平台上实现时存在一些不兼容之处。避免这些麻烦的最佳方法是在每个Cipher.init(…)
调用中指定相同的参数,如下所示:
改变
cipher.init(Cipher.DECRYPT_MODE, this.PrivateKey);
//...
cipher.init(Cipher.ENCRYPT_MODE, this.PublicKey);
到
安卓的哪个版本?
public String Decrypt(byte [] result) throws NoSuchAlgorithmException,NoSuchPaddingException, InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
byte[] decryptedBytes=null;
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.DECRYPT_MODE, this.PrivateKey);
decryptedBytes = cipher.doFinal(result);
System.out.println();
return new String(decryptedBytes);
}
cipher.init(Cipher.DECRYPT_MODE, this.PrivateKey);
//...
cipher.init(Cipher.ENCRYPT_MODE, this.PublicKey);
cipher.init(Cipher.DECRYPT_MODE, this.PrivateKey, OAEPParameterSpec.DEFAULT);
//...
cipher.init(Cipher.ENCRYPT_MODE, this.PublicKey, OAEPParameterSpec.DEFAULT);