我在Web服务器上用PHP解密时遇到问题,当我尝试对存储在数据库中的加密进行解密时,它会失败,解密的输出显示在符号中如下:
±8¼®¿2>〜ëA¥Ã™NA
这是我用来解密的代码:
encrypt/decrypt
<?php
class MCrypt
{
private $iv = 'fedcba9876543210';
private $key = '0123456789abcdef';
function_construct()
{
}
function decrypt($code)
{
//$key = $this->hex2bin($key);
$code = $this->hex2bin($code);
$iv = $this->iv;
$td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);
mcrypt_generic_init($td, $this->key, $iv);
$decrypted = mdecrypt_generic($td, $code);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return utf8_encode(trim($decrypted));
}
protected function hex2bin($hexdata)
{
$bindata = '';
for ($i = 0; $i < strlen($hexdata); $i += 2)
{
$bindata .= chr(hexdec(substr($hexdata, $i, 2)));
}
return $bindata;
}
}
?>
这是我用来从数据库获取加密数据的代码:
include ("decrypt.php");
$sql = "SELECT * FROM Save_data";
$mcrypt = new MCrypt();
#Decrypt
$decrypted1 = $mcrypt->decrypt($exif_datetime);
echo $decrypted1;
答案 0 :(得分:1)
如果没有看到加密方法,就无法说出为什么代码没有按照您的预期行事,而是....
return utf8_encode(trim($decrypted));
嗯?这没有任何意义。当然,如果你需要将ISO-8859-1更改为utf8,那么你就是这样做的 - 但是没有办法用与解密相同的方法来完成。
当我尝试对存储在数据库中的加密进行解密时
查看代码意味着加密数据存储为二进制。真?由于各种原因,将base64_encode(或转换为ascii HEX)加密数据存储在DB之前(因此在解密之前的base64_decode)更有意义。
答案 1 :(得分:0)
假设您的输出是$txt = ±8¼®¿2>~ë¥Ùnà Loréane,
您可以通过以下代码解决此问题
echo utf8_encode($ txt);
或尝试添加元标记<meta http-equiv="content-type" content="text/html;charset=utf-8" />
希望它有所帮助。