无法用Java解密RSA

时间:2015-12-09 01:59:55

标签: java php encryption rsa

我的密码在Android应用中使用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;
    }

fileName是frivatekey文件(.pem文件) 现在我需要使用java来解密它。我尝试了一些方法,都失败了。这是我尝试过的:

  1. 使用.pem文件生成.der密钥文件
  2. 阅读.der文件以获取privateKey
  3. 使用从.der文件读取的byte []来生成密钥文件

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

    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);
    }
    
  5. 但它不起作用,我不知道哪里出错了。 在PHP代码中,我看到$prikeyid = openssl_get_privatekey( $key_content, "1234" ); 但我不知道" 1234"手段。这是否意味着使用" 1234"加密密钥文件?这是解密失败的原因吗?

1 个答案:

答案 0 :(得分:1)

  

$padding = $fromjs ? OPENSSL_NO_PADDING : OPENSSL_PKCS1_PADDING;

这些都是糟糕的选择:

请不要自己实施RSA。你将使你的应用程序变得非常不安全。

推荐阅读: