RSA加密:使用PHP重现JS行为
RSA encryption: reproducing JS behaviour with PHP
我正在尝试将一段基于Dave Shapiro的"Javascript中的RSA"库(http://ohdave.com/rsa/(的JS代码转换为PHP(我正在尝试为使用JS加密登录表单的页面创建一个PHP爬虫(
这是我尝试复制的JS代码:
var encryptionExponent = '010001';
var modulus = '00c6d7c11554aab59454b558169da42db14dec4ae0aacd9311aaec4260040fbb474885b5b1b73a5a40288f6ec301db37f920b05a0ad9f8119453b2b6b9ec4cca163ab3ab51e2d334eade81efeb01bed16e4f15fb2143e422cd3dec91a1b96ede4229ca9141ed27ffa72e643340a8db68b3ce38f65a8f59f570851196a76d2cbd67';
setMaxDigits(130);
var keyPair = new RSAKeyPair(encryptionExponent, null, modulus);
var encrypted = encryptedString(keyPair, 'test');
console.log(encrypted);
以下是JS代码的加密输出:
c026f303aaa7114c7c0328e7112755eaa33c8f785908206c36d96e56bbee141c0a5504a41cbb8acf52de8254fa225ee0007b78fcd7791ce7a930ea1f3cd582329d05330c33d98354410562982f85f8997069c1535df062224103a09d1b2a4d0bf1bfa454f882af2a9828ed214c405f75d74cab8077c384bdef0c7f28a84eb8fe这是我基于 PHPSecLib 的 PHP 代码:
$rsa = new Crypt_RSA();
$rsa->modulus= new Math_BigInteger('00c6d7c11554aab59454b558169da42db14dec4ae0aacd9311aaec4260040fbb474885b5b1b73a5a40288f6ec301db37f920b05a0ad9f8119453b2b6b9ec4cca163ab3ab51e2d334eade81efeb01bed16e4f15fb2143e422cd3dec91a1b96ede4229ca9141ed27ffa72e643340a8db68b3ce38f65a8f59f570851196a76d2cbd67', 16);
$rsa->publicExponent= new Math_BigInteger('010001', 16);
$key = $rsa->getPublicKey();
$rsa->loadKey($key);
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt("test");
echo bin2hex($ciphertext)."'n";
以下是 PHP 代码的加密输出:
147e59d33fa0f5757bdd0a18822843aa6511f7c82d3398d503c19fb11e65b6b238694407cadf0c79655dfb4c2e0ab465e5e8e4025e2f579ea160be760af121aa7e303f875f813848cff2a82fd8c4d24f8bc87981e99c7a22216546013fb54210c06752833ac8722db789212636bf8c9be94b589b8def8af8c632df7c4dac432a输出是不同的,即使指数和模数相同。我需要我的PHP输出与JS输出相同(解密将在我无法控制的服务器上进行(。
我无法理解JS代码正在执行哪种加密。我怀疑我的PHP加密选项是错误的。
另外,我应该对我的PHP BigIntegers做一些事情来匹配JS设置MaxDigits(130(吗?
你会看到一个区别,因为这个JavaScript实现使用零填充,但phpseclib只支持RSAES-PKCS1-v1_5和RSAES-OAEP填充。你要么必须交换你的JavaScript实现,要么交换php实现,以便两者都支持相同的东西。
我建议你把 JavaScript 实现换成一些通用的东西,比如 forge。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- RSA加密:使用PHP重现JS行为
- Php重现一个js脚本(转换为Php脚本)