php - 使用 phpseclib 进行 RSA 解密失败
问题描述
我有使用 RSA 加密字符串并将加密数据发送到 PHP Web 服务器的移动应用程序。
经过搜索,我发现phpseclib用于解密RSA 最新版本 2.0。
尽管使用了模式,但无论我做什么,我都会收到错误消息
难道我做错了什么?
我试过的:
解密私钥:
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBAJyHUgC1ijhsETeuoNMh4c4yrFoL4juL/yDderMC9fBd1TFgEoJ5dxzMzdlzVVj7Vc/H/I+k13yY3W0MknS//k8CAwEAAQJAaaL1l57s8lkUYZTL2tFh9+vA32BnxLIdc0ullAwqeJV21wXcEyDA67fbmBywdt+pVKkeO2NU7fD3e+DZREuJ0QIhAPZNo9jirkRl4i/Lv3jWt6SmeUBeyIKK0u4lZiBF9KAZAiEAorDjj2c9WBdP46S9hK7yj0U5/0QHB0pO01j9QSVBvqcCIQDrYre7hqdU5qmLVATgzxMiX5ZxViP53gJHZaZ8IV7vwQIgTTYEGafWjjsqGBC0PQdGaMZi+wnPCB+0/0rpjoRfClsCIBPzZw+lappnVxXHuUoQQeN6uevqSvmgvC42UyA4HABa
-----END RSA PRIVATE KEY-----
加密消息(base64 编码):
SMZiVTAMizngWa5Yg2Xp0F3Coy4cIsLB6mru2rLhxnvS2SC\/rm9pgPVLdA\/hp+1TIbzHZqjc2lnP\nkvzh797WlA==\n
PHP 示例代码:
$rsa = new RSA();
$rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
$rsa->loadKey($privateKey);
echo $rsa->decrypt(base64_decode($strBase64));
结果:
Notice: Decryption error in C:\xampp\htdocs\webservice\vendor\phpseclib\phpseclib\phpseclib\Crypt\RSA.php on line 2553
模式:
$rsa->setEncryptionMode(RSA::ENCRYPTION_OAEP);
结果:
Notice: Decryption error in C:\xampp\htdocs\webservice\vendor\phpseclib\phpseclib\phpseclib\Crypt\RSA.php on line 2432
模式:
$rsa->setEncryptionMode(RSA::ENCRYPTION_NONE);
结果:
string(128) "I�W��B'q����;k��}�1������=��x���*���_��aq�)�D� '�m{��� ��n���C:��t �E����R=�S�y�3$QC�EV.3C�{�.Y�jx�6��!�e�˱]�I ����S�/�'I�|"
解决方案
正如 James J Polk 所观察到的,您的 base64 编码字符串中有一些坏字符。idk 你在 PHP 中使用什么作为分隔符,但这对我有用:
$strBase64 = 'SMZiVTAMizngWa5Yg2Xp0F3Coy4cIsLB6mru2rLhxnvS2SC\/rm9pgPVLdA\/hp+1TIbzHZqjc2lnP\nkvzh797WlA==\n';
$strBase64 = str_replace(['\/', '\n'], ['/', ''], $strBase64);
如果您使用双引号而不是单引号,请执行以下操作:
$strBase64 = "SMZiVTAMizngWa5Yg2Xp0F3Coy4cIsLB6mru2rLhxnvS2SC\/rm9pgPVLdA\/hp+1TIbzHZqjc2lnP\nkvzh797WlA==\n";
$strBase64 = str_replace(['\/', "\n"], ['/', ''], $strBase64);
推荐阅读
- docker - Docker拉镜像不成功,卡住了
- java - 与邮递员一起工作时无法通过表单发送 POST 请求
- java - Cannot find the WebElements with Selenium that I can see from the Chrome browser's inspect window
- shiny - 根据文件选择保存和加载用户选择 - RShiny
- android - 基于 ViewPager 偏移的动画
- mysql - 选择两行之和等于一个值的两行
- mysql - 更改 mysql 查询输出中的特定字段
- html - 如何使自动完成=关闭在谷歌浏览器中工作?
- regex - 正则表达式选择字符串中 <> 之外的所有内容
- .net - SQL Server:使用父子关系偏移行获取下一个