无法使用java对RSA进行解密

无法使用java对RSA进行解密,java,php,encryption,rsa,Java,Php,Encryption,Rsa,我的密码在安卓应用程序中使用RSA加密。在服务器端,我需要对其进行解密。我有一个.pem文件和用于解密的php代码: function privatekey_decodeing($crypttext, $fileName, $fromjs = FALSE) { $key_content = file_get_contents( $fileName ); $prikeyid = openssl_get_privatekey( $key_content, "

我的密码在安卓应用程序中使用RSA加密。在服务器端,我需要对其进行解密。我有一个.pem文件和用于解密的php代码:

 function privatekey_decodeing($crypttext, $fileName, $fromjs = FALSE)
    {
        $key_content = file_get_contents( $fileName );
        $prikeyid = openssl_get_privatekey( $key_content, "1234" );
        $crypttext = str_replace(' ', '+', $crypttext);
        $crypttext = base64_decode( $crypttext );
        $padding = $fromjs ? OPENSSL_NO_PADDING : OPENSSL_PKCS1_PADDING;
        if( openssl_private_decrypt( $crypttext, $sourcestr, $prikeyid, $padding ) )
        {
            return $fromjs ? rtrim( strrev( $sourcestr ), "/0" ) : "" . $sourcestr;
        }
        return;
    }
文件名为frivatekey文件(.pem文件) 现在我需要用java来解密它。我试过一些方法,都失败了。以下是我尝试过的:

  • 使用.pem文件生成.der密钥文件
  • 读取.der文件以获取私钥
  • 使用从.der文件读取的字节[]生成密钥文件

    public static PrivateKey generatePrivateKey(byte[] key)
        throws NoSuchAlgorithmException, InvalidKeySpecException {
        KeySpec keySpec = new PKCS8EncodedKeySpec(key);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        return keyFactory.generatePrivate(keySpec);
    }
    
  • 解密我的密码

    public static byte[] decrypt(PrivateKey privateKey, byte[] data)
        throws Exception {
        Cipher ci = Cipher.getInstance(ALGORITHOM, DEFAULT_PROVIDER);
        ci.init(Cipher.DECRYPT_MODE, privateKey);
        return ci.doFinal(data);
    }
    
  • 但它不起作用,我不知道哪里出了问题。 在php代码中,我看到了
    $prikeyid=openssl\u get\u privatekey($key\u content,“1234”)
    但我不知道“1234”是什么意思。这是否意味着使用“1234”加密密钥文件?这就是解密失败的原因吗

    $padding=$fromjs?OPENSSL_无_填充:OPENSSL_PKCS1_填充

    这两个选项都不好:

    • 未添加RSA
    • PKCS1填充(也是默认填充模式)为;因此它也是不安全的
    请不要自己实现RSA。您将使您的应用程序非常不安全

    建议阅读:

    • (包括Java和PHP)

    是的,1234是用于加密密钥本身的密码短语。感谢您的回复和对我的问题的修改(很抱歉我的英语很差,没有检查问题),您知道我如何使用“1234”在java中解密密钥文件吗?感谢您的专业回答,消化它们对我来说并不容易,简单模式:客户端的libnaudeJNI+服务器上的libnaudePHP。