PHP 中 Java 的 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 等效项

标签 java php encryption rsa phpseclib

我有一个案例,一个“ secret ”从 Java 应用程序传给我,并且使用公钥和 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 密码对其进行加密。我试图在最后破译它,但我不确定如何获得该密码的等价物。我一直在使用 phpseclib 来处理其他安全问题,并且尝试了其中的 OAEP 加密模式,但没有成功。我刚刚收到解密错误,没有任何信息。我只想声明 key 是正确的:

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);
}

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

最佳答案

尝试 $rsa->setMGFHash('sha1'); RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 中的 SHA-256 不会' t 指的是 MGF1 哈希值。要使其成为 sha256,您必须这样做:

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);
}

关于PHP 中 Java 的 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32121501/

相关文章:

php - 如何使用 preg_match 来测试空格?

java - 启动 Datomic shell 时出错 : java. lang.NoClassDefFoundError: jline/ConsoleRunner

java - 我怎样才能在应用程序关闭之前做些什么?

java - Hadoop 中的Reducer 在集群上运行时出现异常

javascript - React-Native fetch 不将正文内容发送到 $_POST

php - 在 Ubuntu 根问题上安装 MySql

c - 如何在不存在 NULL 字节的哈希函数中确保安全性?

amazon-web-services - AWS EC2 用户数据加密

java - 我注意到 log4j2.xml 中某些属性前面的前缀 'sd:'——它们代表什么?

java - 如何针对 xsd 验证 xml 并获取 *ALL* 错误?