Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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环境下Android设备的字符串?_Java_Android_Rsa - Fatal编程技术网

为什么我不能解码来自Java环境下Android设备的字符串?

为什么我不能解码来自Java环境下Android设备的字符串?,java,android,rsa,Java,Android,Rsa,我使用Android设备用以下代码编写字符串: 安卓端,键长:2048 //Init: need time private void prepareEncrypt(String publicKey) throws Exception { X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey.getBytes())); KeyFactory keyFactor

我使用Android设备用以下代码编写字符串:

安卓端,键长:2048

//Init: need time
private void prepareEncrypt(String publicKey) throws Exception {
    X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey.getBytes()));
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    PublicKey pubKey = keyFactory.generatePublic(keySpec);
    cp = Cipher.getInstance("RSA/ECB/OAEPWithSHA-512AndMGF1Padding");
    cp.init(Cipher.ENCRYPT_MODE, pubKey);
}

//encrypt
private byte[] encryptByPublicKey(byte[] data) {
    //data = Base64.getEncoder().encode(data);
    byte[] result = new byte[0];
    try {
        result = cp.doFinal(data);
    } catch (BadPaddingException e) {
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        e.printStackTrace();
    }

    return result;
}
获取密文a

然后我尝试在elipse上用Java解码A:

public static byte[] decryptByPrivateKey(byte[] encrypted, byte[] privateKey) throws Exception {
    PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));
    KeyFactory kf = KeyFactory.getInstance("RSA");
    PrivateKey keyPrivate = kf.generatePrivate(keySpec);
    Cipher cp = Cipher.getInstance("RSA/ECB/OAEPWithSHA-512AndMGF1Padding");
    cp.init(Cipher.DECRYPT_MODE, keyPrivate);
    byte[] arr = cp.doFinal(Base64.getDecoder().decode(encrypted));
    return arr;
}
我总是无法解码字符串

javax.crypto.BadPaddingException: Decryption error
    at sun.security.rsa.RSAPadding.unpadOAEP(Unknown Source)
    at sun.security.rsa.RSAPadding.unpad(Unknown Source)
    at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363)
    at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
如果Android不更改对象密码上的转换参数,如:

RSA/ECB/NOP

RSA/ECB/PKCS1添加

RSA/ECB/OAEPHA-1和MGF1填充

RSA/ECB/OAEPHA-224和MGF1

RSA/ECB/OAEPHA-256和MGF1

RSA/ECB/OAEPHA-384和MGF1

RSA/ECB/OAEPHA-512和MGF1

如何成功解码密文A?需要:

    OAEPParameterSpec oaepParameterSpecDec = new OAEPParameterSpec("SHA-512", "MGF1", new MGF1ParameterSpec("SHA-512"), PSource.PSpecified.DEFAULT);
    ...
    cp.init(Cipher.DECRYPT_MODE, keyPrivate, oaepParameterSpecDec);
很明显,给我一个数字