【问题标题】:Java's RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING equivalent in PHPJava 的 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 在 PHP 中的等价物
【发布时间】:2015-08-20 14:50:52
【问题描述】:

我有一个案例,一个“秘密”从 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);
}

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

【问题讨论】:

  • secure.php.net/manual/en/function.openssl-private-decrypt.php 这似乎是最有可能的候选人,尽管OPENSSL_PKCS1_OAEP_PADDING 似乎并不那么具体。我不知道你是否可以这样做;您是否考虑过使用 libsodium 代替? crypto_box_seal()crypto_box_seal_open() 适用于此用例。
  • 谢谢斯科特。我将使用 OPENSSL_PKCS1_OAEP_PADDING 尝试 PHP 的 open ssl 方法,看看它是否有效。如果做不到这一点,我会看看github.com/jedisct1/libsodium-php
  • openssl_private_decrypt() 不起作用。会让你知道我如何使用 libsodium。
  • 遗憾的是,我将不得不在 Windows 上执行此操作。任何人都知道如何在没有 Vsual Studio 的情况下让 libsodium 在 Windows 上运行?

标签: java php encryption rsa phpseclib


【解决方案1】:

试试$rsa->setMGFHash('sha1'); RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 中的SHA-256 不是指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);
}

【讨论】:

  • 是的,这就是我今天早上早些时候尝试的方法(根据其他人的建议,它奏效了)。我会添加到您的答案中,然后接受它。谢谢。
猜你喜欢
  • 2015-08-31
  • 1970-01-01
  • 2015-11-16
  • 2021-11-16
  • 2020-03-17
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2015-03-27
相关资源
最近更新 更多