将 Javascript 加密逻辑转换为 PHP(可能是 AES 方法)
Convert Javascript encryption logic to PHP (Probably AES Method)
我在将以下 javascript 加密逻辑转换为 PHP 时遇到问题,无法在 Internet 上找到此 javascript 库,因此没有文档或线索从哪里开始。
似乎加密使用的是 AES 方法,但它很奇怪,因为 AES 只接受输入字符串和密码,iv 与 [=25= 上的变量 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/
谢谢
以下代码是简单的 AES CBC en-/decryption ,没有任何适当的异常处理,仅用于教育目的。
所有学分归功于@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 ' . 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;
?>
我在将以下 javascript 加密逻辑转换为 PHP 时遇到问题,无法在 Internet 上找到此 javascript 库,因此没有文档或线索从哪里开始。
似乎加密使用的是 AES 方法,但它很奇怪,因为 AES 只接受输入字符串和密码,iv 与 [=25= 上的变量 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/
谢谢
以下代码是简单的 AES CBC en-/decryption ,没有任何适当的异常处理,仅用于教育目的。
所有学分归功于@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 ' . 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;
?>