簡體   English   中英

如果使用中文字符,為什么php md5()與python的hash.md5()總是不同?

[英]Why does php md5() always different from python's hash.md5() if using chinese character?

這是我的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代碼:

#!/usr/bin/env python
#coding:utf-8


import urllib
import hashlib

str_u = u'你好'
str_gb = str_u.encode('gbk')
str_u8 = str_u.encode('utf-8')

m = hashlib.md5()
m.update(str_gb)
str_gb_md5 = m.hexdigest()
m.update(str_u8)
str_u8_md5 = m.hexdigest()

print 'gb md5:%s' % str_gb_md5
print 'utf-8 md5:%s' % str_u8_md5

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

謝謝!

您的php和python代碼都有錯誤。 php代碼中的gbk md5和python代碼中的utf8 md5是錯誤的。

Python部分:

您誤解了Python hashlib的hash.update函數的用法。

hash.update(ARG)

使用字符串arg更新哈希對象。 重復調用等效於將所有參數串聯在一起的單個調用: m.update(a); m.update(b)等同於m.update(a + b)

固定:

print  hashlib.md5(str_u8).hexdigest()

7eca689f0d3389d9dea66ae112e5cfd7

PHP部分:

您忘記將$ str傳遞給iconv函數,而是傳遞了一個真值(隱蔽性為1)。

固定:

$str = '你好';
$str_gb = iconv('UTF-8', 'GBK', $str);
echo sprintf("gb encoding md5:%s\n", md5($str_gb));

輸出:

gb編碼md5:b94ae3c6d892b29cf48d9bea819b27b9

iconv定義

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM