phpseclib 2 RSA 解密工作正常,但 phpseclib 3 RSA 解密无法正常工作

标签 php encryption rsa phpseclib

phpseclib2 示例 - 工作

use phpseclib\Crypt\RSA;
$rsa = new RSA();
$rsa->loadKey($PRIVATE_KEY);
$key = $rsa->decrypt(base64_decode($a));

phpseclib3 示例 - 不工作

use phpseclib3\Crypt\PublicKeyLoader;

$private = PublicKeyLoader::load($PRIVATE_KEY);
$key = $private->decrypt(base64_decode($a));

最佳答案

V2 和 V3 都默认使用 OAEP 进行 RSA,但 V2 使用 SHA1 作为 OAEP 和 MGF1 摘要的默认值,而 V3 使用 SHA256(第 herehere )。
因此,为了使适用于 V2 的解密也适用于 V3,V3 中的摘要必须显式设置为 SHA1:

$decrypted = $private->withHash("sha1")->withMGFHash("sha1")->decrypt(base64_decode($a));

请注意,SHA1 被认为是不安全的,但在 OAEP 上下文中没有已知的安全问题,请参阅 here了解更多详情。
但是,如果只是为了支持从生态系统中消除 SHA1,就没有理由不切换到 SHA256(尽可能)。

关于phpseclib 2 RSA 解密工作正常,但 phpseclib 3 RSA 解密无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72977929/

相关文章:

php - 管理 PHP 错误

带有 in_array() 和 range() 的 PHP switch() 无法正常工作

java - 是否有模拟 C 的 crypt 函数的 java 函数?

javascript - AES 128 解密 : First char of CryptoJS. enc.Latin1 格式错误

php - 通过ajax发送未选中的复选框值

pdf - poppler pdfunite 无法合并加密的 PDF 文件,如何去除加密? (无需密码即可打开)

android - 在 AndroidKeystore 中保存和检索 key 对

java - RSA 私钥仅支持 RSAPrivate (Crt) KeySpec 和 PKCS8EncodedKeySpec

encryption - RSA如何保持认证和不可否认性

PHP/MySQL/TextArea 问题