gpt4 book ai didi

javascript - RSA 加密 : reproducing JS behaviour with PHP

转载 作者:行者123 更新时间:2023-11-30 12:31:42 25 4
gpt4 key购买 nike

我正在尝试将一段基于 Dave Shapiro 的“RSA in Javascript”库 (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代码的加密输出: c026f303aaa7114c7c0328e7112755eaa33c8f785908206c36d96e56bbee141c0a5504a41cbb8acf52de8254fa225ee0007b78fcd7791ce7a930ea1f3cd582329d05 330c33d98354410562982f85f8997069c1535df062224103a09d1b2a4d0bf1bfa454f882af2a9828ed214c405f75d74cab8077c384bdef0c7f28a84eb8fe

这是我的 PHP 代码,基于 PHPSecLib:

$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 setMaxDigits(130)?

最佳答案

您会看到不同之处,因为此 JavaScript 实现使用零填充,但 phpseclib 仅支持 RSAES-PKCS1-v1_5 和 RSAES-OAEP 填充。您必须交换 JavaScript 实现或 php 实现,以便两者支持相同的东西。

我建议您将 JavaScript 实现换成通用的东西,例如 forge .

关于javascript - RSA 加密 : reproducing JS behaviour with PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com