Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BadPaddingException解决方案_Java_Android_Rsa - Fatal编程技术网

Java BadPaddingException解决方案

Java BadPaddingException解决方案,java,android,rsa,Java,Android,Rsa,我不知道为什么在android studio和netbean中使用相同的代码时,行为会有所不同。我试图在android studio中使用RSA算法编写脚本并在netbean中解密,但解密不起作用。 它抛出了一个BadPadding异常,但在android中使用相同的输入,解密工作正常 Android studio Netbean 有人能帮我吗?在您的“解密”方法中,当您调用cipher.init(…)时,您需要包含类型为OAEPParameterSpec的必要第三个参数 密码类的文档: 我怀疑

我不知道为什么在android studio和netbean中使用相同的代码时,行为会有所不同。我试图在android studio中使用RSA算法编写脚本并在netbean中解密,但解密不起作用。 它抛出了一个BadPadding异常,但在android中使用相同的输入,解密工作正常

Android studio

Netbean


有人能帮我吗?

在您的“解密”方法中,当您调用
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);