Python生成的MD5与PHP7不符,求调整Python代码匹配PHP哈希
解决Python与PHP MD5哈希不匹配的问题
嘿,我来帮你搞定这个困扰!你说日期字符串完全一致但MD5哈希不一样,核心原因其实是Python和PHP对字符串的字节处理逻辑不同,只要调整Python代码的编码步骤就能解决。
问题根源
PHP的md5()函数默认直接对字符串的字节流进行哈希计算(通常用UTF-8编码,取决于PHP脚本的内部编码设置);而Python 3里的字符串是Unicode格式,hashlib.md5()必须接收字节对象才能计算哈希——如果直接传字符串要么报错,要么隐式用了和PHP不一致的编码,导致哈希结果不同。
修改后的Python代码
import hashlib import datetime timestamp = datetime.datetime.now() - datetime.timedelta(hours=6) timestamp1 = timestamp.strftime("%Y-%m-%d %H:%M:%S") print(timestamp1) # 关键步骤:把字符串编码成与PHP一致的字节流(这里用UTF-8,是PHP最常用的默认编码) md5_digest = hashlib.md5(timestamp1.encode('utf-8')).hexdigest() print(md5_digest)
额外检查项(如果还是不匹配)
- 确认PHP的编码:可以在PHP里执行
echo mb_internal_encoding();查看当前编码,如果不是UTF-8,比如是GBK,就把Python里的encode('utf-8')改成encode('gbk')。 - 再次核对日期字符串:确保两边输出的
YYYY-MM-DD HH:MM:SS完全一致,包括空格、符号格式(strftime生成的格式和PHPdate()默认生成的格式是一致的,但还是要仔细核对)。
内容的提问来源于stack exchange,提问作者Alex Winkler
相关产品推荐
相关产品推荐

