【发布时间】:2020-03-04 19:53:48
【问题描述】:
我有一个 unity3d 应用程序,它请求一个图像名称的 json 字符串,包括它在我的 django 网络服务器中的哈希值。然后我的统一应用程序将检查我现有的图像哈希是否与请求的 json 相同。我的问题是统一哈希结果与我的 python 哈希结果值不同。我还尝试在两者上散列字符串,它返回相同的散列值。
Python 哈希:
>>> image_file = open('C:/image.png').read()
>>> hashlib.md5(image_file).hexdigest()
'658e8dc0bf8b9a09b36994abf9242099'
Unity3d 哈希:
public static string ComputeHash()
{
// Form hash
System.Security.Cryptography.MD5 h =System.Security.Cryptography.MD5.Create();
var myImage = File.OpenRead(PathByPlatform("image.png"));
var data = h.ComputeHash(myImage );
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < data.Length; ++i)
{
sb.Append(data[i].ToString("x2"));
}
return sb.ToString();
//This fucntion returns
//fac7f19792a696d81be77aca7dd499d0
}
【问题讨论】:
-
会不会是编码问题?您是否尝试过使用
System.Convert.ToString(data[i], 16).PadLeft(2, '0')而不是直接使用ToString("x2")?我也不确定,但我猜ComputeHash已经以十六进制返回,所以你再次使用"x2"做了两次? -
@derHugo 我尝试了你的建议,但它返回相同的值“fac7f19792a696d81be77aca7dd499d0”
-
您尝试了吗:
open('C:/image.png', "rb").read()如果这不起作用,您能否发布一张 png 图片并告诉我们您得到的结果。或者告诉我们,例如,您从以下 png 文件中获得了什么 md5sum? (这只是一个随机的 png,我在网上找到的,没有版权img.pngio.com/…)根据给定的数据,我们不知道哪个 md5sum 是错误的 -
感谢@gelonida 它确实返回了相同的哈希值。所以 c# 代码返回了正确的哈希值。关于您链接的图像,它以两种语言返回 478b3711f0fecda488a9f95ac0b9a6c8 。您能否发表评论作为答案,以便我接受。