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(第 here 和 here )。
因此,为了使适用于 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/