javascript - PHP 和 JS mcrypt 解密不起作用

标签 javascript php encryption mcrypt des

我在 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/

相关文章:

javascript - 如何使下拉菜单水平

javascript - 更改 font-awesome 图标 onclick Reactjs

Javascript 基本自增和自减

php - 在网络上显示 iPhone 照片时尊重 EXIF 方向

php - 使用 set_error_handler 时可以获得更有意义的文件和行信息吗?

php - Symfony:如何自动加密/解密路由参数?

javascript - js中克隆的substring()函数出错

php - 如何删除数据库中具有特定变量值(用户ID)的所有 session ?

php - 在php中加密和解密word docx文件的问题

c# - 'hide' 密码短语、初始化向量等的最佳方法..用于类库中的加密