PHP 8下Crypt_RSA迁移至phpseclib3报错求助:签名代表超出范围
PHP 8升级后phpseclib3 RSA签名报错排查
问题背景
升级至PHP 8后,原项目依赖的Crypt/RSA.php已被弃用,改用支持PHP 8的phpseclib3进行RSA签名,但迁移后代码抛出异常。
新旧代码对比
新代码(报错)
$rsa = \phpseclib3\Crypt\RSA::loadPrivateKey($private_key); $rsa = $rsa->withHash('sha256'); $rsa = $rsa->withPadding(RSA::SIGNATURE_PKCS1); $ans = $rsa->sign("test"); echo $ans;
旧代码(正常运行)
$rsa = new Crypt_RSA(); $rsa->loadKey($private_key); $rsa->setHash('sha256'); // 指定摘要算法,默认sha1 $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); $signature = base64_encode($rsa->sign($string_to_encrypt));
错误信息
Uncaught OutOfRangeException: Signature representative out of range in xxx
测试密钥
-----BEGIN RSA PRIVATE KEY----- MIICXwKBAQACgYDWZIPLr6mbty5UIwUnnP8RGjZnrAA1tlQXyqOS89h9LwLwsvlr 8u+1t1iGb+J4wFU34iYTKiHiA2U5Ik5eNnHDR1r9g+UcoM98gQA67D4Ns2+lTHSn 53Bfp/6RvkOPkQq1u6E0zz6bXAXcpZX6kBPIeF4gq+vRj62tprZ90DfuSQKBAwEA AQKBgKdRfNZbOshPFvYM+rnmud3UEj+oqeVBbbG/sRc//WX9aZMGashHqbKs64bI DPxmRlu9wC9Ww2jLc5U6Y+T9IpxyCBddx93iiGVFVYxAwYMT16gp/RV5RJOh4779 z7QxDvf3h+pCMLry581Irq+qInVuMKB1NCcdfYYYcoOSLz9tAoFA6lbLDDFA++UN +xSYUOX4M+QdDpkbKc3R3tRhXRG1hD1s6cT/FZtikoK56XktE8LV9jYbfW78ukK7 mCVenBXwqwKBQOo1ufanHxjW31ntAjgh7wqpDscVW3fOtH5Yb/zbfgp70zNU6S4t o7CMMvllZq4aJIq+s/afKlLt8r4lRSjRJNsCgUBSsdQvdkYfXgJkAy2JBs5iyXHz j9YFF4ujHcFKDZDHnMGNcSYvIslTOGyQ1mEw4wWMQCXNSthGhnwawb00SY3HAoFA UsgCnsebGjB4aVR4QFbeIqp2aq+F0ObirPWdP4ZlGleB4tbURFolTTWAnt3UWR0s ZU3aVgUT9JPeBI8vzql9mQKBQOX+pnnO5iWu+F2FFzSfM7g3ENCmjSEJ7xBXXUA/ LJVdk0rQRbl1XojjSEGp85NS4EncWo1JFyAXBh7ZC24LAzc= -----END RSA PRIVATE KEY-----
排查与解决方案
修正常量命名空间引用
新代码中RSA::SIGNATURE_PKCS1未指定完整命名空间,PHP无法定位该常量,导致padding模式设置错误,引发签名计算异常。需修改为:$rsa = $rsa->withPadding(\phpseclib3\Crypt\RSA::SIGNATURE_PKCS1);或在文件开头添加命名空间导入:
use phpseclib3\Crypt\RSA;之后即可直接使用
RSA::SIGNATURE_PKCS1。验证密钥加载状态
可在加载密钥后添加调试代码,确认密钥是否成功解析:$rsa = \phpseclib3\Crypt\RSA::loadPrivateKey($private_key); var_dump($rsa->getPrivateKey()); // 输出密钥信息,确认加载成功对齐旧代码的输出逻辑
旧代码对签名结果做了base64_encode,新代码直接输出二进制数据可能导致展示异常,建议同步处理:$ans = base64_encode($rsa->sign("test")); echo $ans;
内容的提问来源于stack exchange,提问作者Aaron Lee Herng Yue
相关产品推荐
相关产品推荐

