我在 Javascript 中有以下代码来使用 key 加密字符串:
des.js 是这样的:http://www.tero.co.uk/des/code.php
<script src="/js/des.js"></script>
<script>
var key = '12345678';
var message = 'hello world';
var ciph = des(key, message, 1, 0);
ciph = stringToHex(ciph);
console.log("Encrypted Result: " + ciph);
</script>
然后我将其发送到服务器端并尝试使用以下 PHP 代码进行解密:
$key = '12345678';
$hexa = '0x28dba02eb5f6dd476042daebfa59687a'; /This is the output from Javascript
$string = '';
for ($i=0; $i < strlen($hexa)-1; $i+=2) {
$string .= chr(hexdec($hexa[$i].$hexa[$i+1])); }
echo mcrypt_decrypt(MCRYPT_DES, $key, $string, MCRYPT_MODE_ECB);
我尝试过将其转换为 utf8、更改编码、更改十六进制解码等,但它总是出现乱码,有时是不可读的字符,有时是可读但无意义的。
最佳答案
解密字符串的方法无法正常工作,请尝试以下操作:
$key = '12345678';
$hexa = '0x28dba02eb5f6dd476042daebfa59687a';
function hexToString ($h) {
$r = "";
for ($i= (substr($h, 0, 2)=="0x")?2:0; $i<strlen($h); $i+=2) {$r .= chr (base_convert (substr ($h, $i, 2), 16, 10));}
return $r;
}
echo mcrypt_decrypt(MCRYPT_DES, $key,hexToString('0x28dba02eb5f6dd476042daebfa59687a'), MCRYPT_MODE_ECB);
输出将是:hello world
这种方式工作正常,但是,您应该寻找另一种方法来加密您的数据,在您的脚本中 key (12345678)并且您的加密方法对每个人都是可见的。
关于javascript - PHP 和 JS mcrypt 解密不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41753233/