【问题标题】:How to compare hash of an image using python and unity3d C#?如何使用 python 和 unity3d C# 比较图像的哈希值?
【发布时间】: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 。您能否发表评论作为答案,以便我接受。

标签: python unity3d hash md5


【解决方案1】:

您是否尝试open('C:/image.png', "rb").read() 以二进制模式读取文件?

读取不带“b”的文件会将 Windows 上的行尾字符从 CR/LF 更改为 LF,这对哈希有影响。 (至少对于python2)

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2016-09-08
    • 2015-01-25
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多