Java 的 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 相当于 PHP
Java's RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING equivalent in PHP
我有一个案例,'secret' 从 Java 应用程序传给我,它是使用 public 密钥和 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);
}
任何帮助将不胜感激!谢谢!
尝试 $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);
}
我有一个案例,'secret' 从 Java 应用程序传给我,它是使用 public 密钥和 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);
}
任何帮助将不胜感激!谢谢!
尝试 $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);
}