PHP解密解决方案

时间:2012-01-13 04:19:39

标签: php mysql encryption

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

2 个答案:

答案 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" />

希望它有所帮助。