我正在尝试创建一个二进制文件 (flv/f4v 等) 的校验和,以验证服务器和客户端计算机之间文件的内容。运行在客户端计算机上的应用程序基于 Python,而服务器则使用 PHP。
以下是 PHP 代码:
$fh = fopen($filepath, 'rb');
$contents = fread($fh, filesize($filepath));
$checksum = md5(base64_encode($contents));
fclose($fh);
以下是Python代码:
def _get_md5(filepath):
fh = open(filepath, 'rb')
md5 = hashlib.md5()
md5.update(f.read().encode('base64'))
checksum = md5.hexdigest()
f.close()
return checksum
在我正在测试的特定文件上,PHP和Python的md5哈希字符串分别如下:
cfad0d835eb88e5342e843402cc42764
0a96e9cc3bb0354d783dfcb729248ce0
服务器运行的是CentOS,而客户端是MacOSX环境。我非常感谢任何帮助我理解为什么这两者会生成不同的哈希结果,或者是否有我忽略的问题(我对Python还比较陌生...)。谢谢!
[事后检查:问题最终在于Python和PHP的base64编码方式不同。MD5在这两个脚本平台上的工作方式相同(至少在Python中使用.hexdigest())。