javascript - 将 Javascript 加密逻辑转换为 PHP(可能是 AES 方法)
问题描述
我在将以下 javascript 加密逻辑转换为 PHP 时遇到问题,在 Internet 上找不到此 javascript 库,因此没有文档或线索从哪里开始。
似乎加密使用的是 AES 方法,但很奇怪,因为 AES 只接受输入字符串和秘密,iv与 javascript 上的变量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 加密/解密,没有任何适当的异常处理,仅用于教育目的。
所有功劳归于@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;
?>
推荐阅读
- html - CSS resize image 手机版
- javascript - 俄罗斯方块片从网格旋转
- windows - 将每一行文本创建为变量,并且它们在批量循环中不断变化
- python - 循环问题(python):变量未正确评估
- com - 为什么我的 COM 加载项在 Outlook 桌面中丢失?
- pandas - 将每日数据转换为每月数据并在熊猫中获得几个月的最后一个值
- origen-sdk - 如何强制将所有 bin 转换为 93k multibins 的 gem 输出 93k 本机 bin?
- react-native - 在渲染视图时滚动 KeyboardAwareScrollView 以结束
- wordpress - 自定义帖子类型的单个帖子模板覆盖
- api - 管理 Gcal 响应 + 快递和标头问题