md5使用序列化数组加密cookiedata

时间:2009-11-18 20:58:37

标签: php cookies encryption

我试图这样做 使用md5加密de cookie数据,但我无法验证哈希值。

它必须这样做,因为 cookie_data是序列化数组,因为正常的字符串值可以正常工作。

它实际上来自一个codeigniter类,但它不起作用? 有谁知道问题可能是什么?

$hash    = substr($session, strlen($session)-32); 
$session= substr($session, 0, strlen($session)-32); 

if ($hash !==  md5($session.$this->encrypt_key))
{........

并且cookie值像这样加密

$cookie_data = $cookie_data.md5($cookie_data.$this->encrypt_key);

修改 我发现答案是在创建和验证的过程中使用 urlencode en urldecode md5哈希,因为setcookie自动执行urlencode,从而可能更改哈希值。

谢谢,理查德

3 个答案:

答案 0 :(得分:4)

你有一个错字:

md5($sessie.$this->encrypt_key))

应该是

md5($session.$this->encrypt_key))

如果你在开启通知的情况下发展,你就会更容易发现这种事情。

您不是加密您的数据,而是签署

答案 1 :(得分:2)

md5是单向函数。它不是可逆的,因此您无法解密数据。

您唯一能做的就是加密原始数据(如果您将其保存在别处)并检查第二次计算的结果。

如果检索到的值和计算的新值相同,则您收到的哈希值是有效的(正如您在代码中所做的那样)。

修改

你知道,只有三行代码我会猜到一些可能的原因:

  1. $ session在代码开头不包含cookie_data的相同值。
  2. 你正在使用多字节字符串而strlen不是mb知道的(使用idioms substr($ session,0,-32)来获取字符串的有效负载部分。
  3. 也许substr也不能处理多字节字符串,明确使用mb_substr(或其他任何名称)。
  4. 对我来说,第一个案例是更可能的。我能看到的。

答案 2 :(得分:1)

  

我正在尝试加密de cookie   数据用md5,但我无法解密   它回来进行验证。

md5不是加密方法。它创建了一个单向哈希,无法转回原始数据。

如果您想加密数据,请尝试mcrypt