แปลงตรรกะการเข้ารหัส Javascript เป็น PHP (อาจเป็นวิธี AES)
Aug 17 2020
ฉันมีปัญหาในการแปลงตรรกะการเข้ารหัสจาวาสคริปต์ต่อไปนี้เป็น PHP ไม่พบไลบรารีจาวาสคริปต์นี้บนอินเทอร์เน็ตดังนั้นจึงไม่มีเอกสารหรือเบาะแสที่จะเริ่มต้น
ดูเหมือนการเข้ารหัสจะใช้วิธี AES แต่มันแปลกเพราะ AES ยอมรับเฉพาะสตริงอินพุตและความลับเท่านั้น iv ไม่ตรงกับตัวแปรsบนจาวาสคริปต์ (ไม่ใช่ 16 บิต)
function doCheckR() {
var string= "10000395351475";
console.log("this is plain processing of string : "+string);
var a = ManualJS.jun.Des.parse("79540e250fdb16afac03e19c46dbdeb3"),
s = ManualJS.jun.Des.parse("eb2bb9425e81ffa942522e4414e95bd0"),
result = ManualJS.MDX.goinstring(string, a, {
ii: s
});
console.log("this is a : "+a);
console.log("this is s : "+s);
console.log("this is result : "+result);
result = result.rabbittext.toString(ManualJS.jun.Text21);
console.log("final result for urlencoded : "+encodeURIComponent(result));
}
https://jsfiddle.net/8swegkv6/3/
ขอบคุณ
คำตอบ
1 MichaelFehr Aug 17 2020 at 13:47
รหัสต่อไปนี้เป็นการถอดรหัส AES CBC แบบง่ายโดยไม่มีการจัดการข้อยกเว้นที่เหมาะสมและเพื่อการศึกษาเท่านั้น
เครดิตทั้งหมดไปที่ @Topacoผู้ตรวจสอบอัลกอริทึม & โหมดคีย์และ iv
โปรดอย่าใช้รหัสนี้ในการผลิตเนื่องจากใช้คีย์แบบคงที่ & iv!
ผลลัพธ์:
* * * encryption * * *
ciphertext: lOv3As5iF/wk/1LYB+68gw==
result urlencod: lOv3As5iF%2Fwk%2F1LYB%2B68gw%3D%3D
result expected: lOv3As5iF%2Fwk%2F1LYB%2B68gw%3D%3D
* * * decryption * * *
decryptedtext: 10000395351475
string : 10000395351475
รหัส:
<?php
echo 'https://stackoverflow.com/questions/63447664/convert-javascript-encryption-logic-to-php-probably-aes-method' . PHP_EOL;
$string = "10000395351475"; $aKey = "79540e250fdb16afac03e19c46dbdeb3";
$sIv = "eb2bb9425e81ffa942522e4414e95bd0"; // encryption echo '* * * encryption * * *' . PHP_EOL; $ciphertext = openssl_encrypt($string, "aes-128-cbc", hex2bin($aKey), 0, hex2bin($sIv)); echo 'ciphertext: ' . $ciphertext . PHP_EOL;
$ciphertextUrlencoded = urlencode($ciphertext);
echo 'result urlencod: ' . $ciphertextUrlencoded . PHP_EOL; echo 'result expected: ' . 'lOv3As5iF%2Fwk%2F1LYB%2B68gw%3D%3D' . PHP_EOL; // decryption echo '* * * decryption * * *' . PHP_EOL; $decryptedtext = openssl_decrypt(urldecode($ciphertextUrlencoded), "aes-128-cbc", hex2bin($aKey), 0, hex2bin($sIv)); echo 'decryptedtext: ' . $decryptedtext . PHP_EOL;
echo 'string : ' . $string . PHP_EOL;
?>