python和php计算md5为啥不一样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python和php计算md5为啥不一样相关的知识,希望对你有一定的参考价值。

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

import hashlib

string = '123456SkinRun51'

md5=hashlib.md5() 

md5.update(string.encode('utf-8'))

res=md5.hexdigest()

print('md5加密后结果:',res) 

-------------------------------------------

echo md5(utf8_encode('123456SkinRun51')).php_EOL;

exit();

叙述:python3.6.6 ;php7

参考技术A

Python:

>>> import hashlib
>>> hashlib.md5("测试").hexdigest()
'db06c78d1e24cf708a14ce81c9b617ec'

PHP:

$ echo '<?php echo md5("测试");?>' | php
db06c78d1e24cf708a14ce81c9b617ec

一样的哦 :)

本回答被提问者和网友采纳
参考技术B 是一样的,你自己核对下

为啥在windows XP与windows 7下使用同一MD5效验工具,计算出同一文件的MD5值不一致?

    复制粘贴只是我们字面上看起来不变,但是计算机将文字进行储存需要进行编码,而编码方式的不同将导致储存文件的方式(字节内容)不同,所储存的文件为两个不同的两个文件,进而导致md5计算有差别。

    最简单的例子比如:用windows自带的记事本(notepad.exe)储存同样一个小写的a,先采用默认的编码方式(ANSI)保存(也就是直接保存)为a_a。保存完后另存为a_u,编码方式选择Unicode。对a_a.txt和a_u.txt进行md5校验值比对,你将会发现两者结果是不一样的。

    另外一个例子,如果你用记事本和MS winword保存相同文字内容,计算的MD5校验值也是不同的,因为word文件内除了保存我们看得见的内容外还要保存其他文档格式或文档信息等。

    注:文件名不同对文件内容不产生影响,也就对MD5校验值不产生影响。同样内容的两个文件,即使文件名不同也会产生相同的md5校验值。自己验证,详细请参考文件系统和操作系统相关知识!

参考技术A md5算法对“相同的数据”生成(几乎)唯一的散列值。

winxp,和win7下对同一文件,如果内容一致,会得到同一值。
如果得到的值不同,说明文件内容不同,即使有1个空格,一个字节,1个bit的不同,
都会导致散列值完全不一样。

直接鼠标右击文件,查看属性->文件效验,如果值不同说明文件内容变化。追问

属性里没有文件校验

追答

我的Ghost WinXp都有这个文件效验功能,怎么能说没有。


也可以用windiff工具检验文件是否变动。

懂编程的,可以用php,python,perl,java等预置的md5函数精确计算一下具体值。

通常是文件有变化导致值不同。


值不同,肯定是文件数据不同。文件数据不同的成因可能多样,

1、比如染毒,染恶意软件,会给文件增加内容

2、内存老化失效,网络传输-读写错个别bit。对于老化或松动内存,剪贴也会出错,解压缩会经常CRC效验错。

参考技术B TXT内容确定没有改过?多加空格也算追问

完全的复制粘贴

追答

这就不知道了 不太熟悉md5 刚才去百度看了下 貌似没有关于这类的问题 lz的观察力还是挺强的

以上是关于python和php计算md5为啥不一样的主要内容,如果未能解决你的问题,请参考以下文章

C#的MD5加密为啥和JAVA的加密出来的结果不一样?

c#和php对字串MD5值解释不一样,头疼!

shell里的md5sum生成的结果为啥与程序生成的不一样

为啥在windows XP与windows 7下使用同一MD5效验工具,计算出同一文件的MD5值不一致?

Md5为啥密码同样是123456两次调用得出的加密密码不一样。

java的32位MD5加密与php中的32位MD5加密结果不一样.求帮助