簡體   English   中英

RSA加密:使用PHP重現JS行為

[英]RSA encryption: reproducing JS behaviour with PHP

我試圖將基於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代碼的加密輸出:c026f303aaa7114c7c0328e7112755eaa33c8f785908206c36d96e56bbee141c0a5504a41cbb8acf52de8254fa225ee0007b78fcd7791ce7a930ea1f3cd582329d05330c33d98354410562982f85f8997069c1535df062224103a09d1b2a4d0bf1bfa454f882af2a9828ed214c405f75d74cab8077c384bdef0c7f28a84eb8fe

這是我的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實現,比如偽造

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM