PHP中的Java的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING等价物

时间:2015-08-20 14:50:52

标签: java php encryption rsa phpseclib

我有一个秘密'是来自Java应用程序,它是使用公钥和RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING密码的密码。我试图在我的最后解读它,但我不知道如何得到相当于那个密码。我一直在使用phpseclib作为其他安全措施,我在那里尝试过OAEP加密模式,但无济于事。我只是在没有信息的情况下得到解密错误。我只是想说明关键是正确的:

function oaes_decrypt($ciphertext, $privatekey) {
    $rsa = new \Crypt_RSA();
    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_OAEP);
    $rsa->setMGFHash('sha256');
    $rsa->setHash('sha256');
    $rsa->loadKey($privatekey);

    return $rsa->decrypt($ciphertext);
}

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:3)

尝试$rsa->setMGFHash('sha1'); SHA-256中的RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING并未引用MGF1哈希值。要做到这一点,你必须这样做:

Cipher oaepFromInit = Cipher.getInstance("RSA/ECB/OAEPPadding");
OAEPParameterSpec oaepParams = new OAEPParameterSpec("SHA-256", "MGF1", new MGF1ParameterSpec("SHA-1"), PSpecified.DEFAULT);
oaepFromInit.init(Cipher.DECRYPT_MODE, privkey, oaepParams);
byte[] pt = oaepFromInit.doFinal(ct);
System.out.println(new String(pt, StandardCharsets.UTF_8));

最终结果,在PHP中有效:

function oaes_decrypt($ciphertext, $privatekey) {
    $rsa = new \Crypt_RSA();
    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_OAEP);
    $rsa->setMGFHash('sha1');
    $rsa->setHash('sha256');
    $rsa->loadKey($privatekey);

    return $rsa->decrypt($ciphertext);
}