为什么php md5()总是与python的不同哈希.md5()如果使用汉字?

2024-06-28 19:54:35 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的php代码:

$str = '你好';
$input_encoding = mb_detect_encoding($str, array('ASCII','GB2312','GBK','UTF-8'), true);
echo sprintf('input encoding:%s', $input_encoding);

$str_gb = iconv($input_encoding, 'GBK', true);
echo sprintf("utf8 encoding:%s\n", $str);
echo sprintf("gb encoding md5:%s\n", md5($str_gb));
echo sprintf("utf8 encoding md5:%s\n", md5($str));

下面是我的python代码:

^{pr2}$

PHP代码结果是:

input encoding:CP936
utf8 encoding:你好
gb encoding md5:c4ca4238a0b923820dcc509a6f75849b
utf8 encoding md5:7eca689f0d3389d9dea66ae112e5cfd7

python代码的结果是:

gb md5:b94ae3c6d892b29cf48d9bea819b27b9
utf-8 md5:a8a343223373c7d78c3fb8bad2d786c3

下面是我的编程环境: PHP 5.5.4(cli)和Python 2.6.8

谢谢!在


Tags: 代码echotrueinputmbutf8md5encoding
1条回答
网友
1楼 · 发布于 2024-06-28 19:54:35

php和python代码都有错误。php代码中的gbkmd5和python代码中的utf8 md5是错误的。在

Python部分:

您误解了Python hashlib的hash.update函数的用法。在

hash.update(arg)

Update the hash object with the string arg. Repeated calls are equivalent to a single call with the concatenation of all the arguments: m.update(a); m.update(b) is equivalent to m.update(a+b).

修复:

print  hashlib.md5(str_u8).hexdigest()

7eca689f0d3389d9dea66ae112e5cfd7

PHP部分:

您忘记了将$str传递给iconv函数,而是传递了一个真值(它被转换为1)。在

修复:

^{pr2}$

输出:

gb编码md5:b94ae3c6d892b29cf48d9bea819b27b9

iconv definition

string iconv ( string $in_charset , string $out_charset , string $str )

相关问题 更多 >