【发布时间】:2017-06-04 19:51:36
【问题描述】:
我在 Javascript 中有以下代码来使用密钥加密字符串:
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、更改编码、更改十六进制解码等,但它总是出现乱码,有时是不可读的字符,有时是可读但无意义的。
【问题讨论】:
-
不要使用 DES,它不安全,已经被 AES 取代。不要使用 ECB 模式,它不安全,请参阅ECB mode,向下滚动到 Penguin。而是使用带有随机IV的CBC模式,只需在加密数据前加上IV用于解密即可,它不需要不保密。
-
您需要从十六进制编码字符串中删除“0x”(实际上,我会尝试完全从十六进制切换到base64)。
标签: javascript php encryption mcrypt des