Как сравнить хэш изображения с помощью Python и unity3d C #? - PullRequest
1 голос
/ 08 ноября 2019

У меня есть приложение unity3d, которое запрашивает строку имени файла json, включая его хэш, в моем веб-сервере django. Тогда мое приложение Unity проверит мой существующий хеш-образ, если он такой же, как запрошенный 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
}

1 Ответ

1 голос
/ 08 ноября 2019

Вы пробовали open('C:/image.png', "rb").read(), чтобы прочитать файл в двоичном режиме?

При чтении файлов без «b» в Windows символы конца строки изменятся с CR / LF на LF, что отразится нахеш(хотя бы для python2)

...