Хеш изображения, подскажите

Shogo

Client
Регистрация
07.04.2015
Сообщения
436
Благодарностей
93
Баллы
28
Друзья, вы меня много раз выручали, помогите ещё раз пожалуйста. Как с помощью C# можно получить хеш изображения лежащего в папке? Мне бы простой примерчик, я понятливый.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 765
Благодарностей
2 407
Баллы
113
Хеши бывают разные...
При предоставлении картинки через интернет - хеш может измениться.
В идеале - взять картинку, добавить её в архив.
Рядом с картинкой положить текстовый файл, содержащий хеш, который Вы хотите получить.
Добавить этот архив сюда.
И тогда, уже имея входящие и исходящие данные - можно попытаться Вам помочь.
 

Shogo

Client
Регистрация
07.04.2015
Сообщения
436
Благодарностей
93
Баллы
28
Нет, мне просто надо понять как сделать что то вроде этого: https://www.cyberforum.ru/csharp-beginners/thread1925562.html на Зенке
Хеши бывают разные...
При предоставлении картинки через интернет - хеш может измениться.
В идеале - взять картинку, добавить её в архив.
Рядом с картинкой положить текстовый файл, содержащий хеш, который Вы хотите получить.
Добавить этот архив сюда.
И тогда, уже имея входящие и исходящие данные - можно попытаться Вам помочь.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 765
Благодарностей
2 407
Баллы
113
Нет, мне просто надо понять как сделать что то вроде этого: https://www.cyberforum.ru/csharp-beginners/thread1925562.html на Зенке
И что именно за хеш получится в результате?
На сколько я вижу, вроде не MD5.
Откуда мы/Вы узнаете/узнаем что хеш сгенерирован правильно (как перепроверить правильность результата)?

Вариант получения хеша, на который Вы ссылаетесь не оптимальный и медленный (из-за точечного считывания каждого пикселя, это будет хорошо заметно на больших изображениях).

Вот, в ТоталКомандер считаются хеши - вариантов много - из-за чего я и переспросил какой именно хеш хотите получить в результате.

67197
 
Последнее редактирование:

Shogo

Client
Регистрация
07.04.2015
Сообщения
436
Благодарностей
93
Баллы
28
Я понимаю что на больших изображениях будут сложности, но у меня будут примерно 3 на 3 пикселя, мне нужно просто понять как с помощью C# превратить изображение в некий код (без разницы какой, главное чтобы результат был стабилен)
И что именно за хеш получится в результате?
На сколько я вижу, вроде не MD5.
Откуда мы/Вы узнаете/узнаем что хеш сгенерирован правильно (как перепроверить правильность результата)?

Вариант получения хеша, на который Вы ссылаетесь не оптимальный и медленный (из-за точечного считывания каждого пикселя, это будет хорошо заметно на больших изображениях).

Вот, в ТоталКомандер считаются хеши - вариантов много - из-за чего я и переспросил какой именно хеш хотите получить в результате.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 765
Благодарностей
2 407
Баллы
113
Я понимаю что на больших изображениях будут сложности, но у меня будут примерно 3 на 3 пикселя, мне нужно просто понять как с помощью C# превратить изображение в некий код (без разницы какой, главное чтобы результат был стабилен)
Код, на который Вы ссылаетесь изменён для работы в Зенно:
C#:
string imgPath = @"c:/printscreen.jpg";
string base64_hash = string.Empty;
using(Bitmap newImg = new System.Drawing.Bitmap(imgPath)){ // считали картинку по пути в оперативку
    List<byte> bytes = new List<byte>();
    for (int i = 0; i < newImg.Width; i++) {
        for (int j = 0; j < newImg.Height; j++) {
            System.Drawing.Color pixel = newImg.GetPixel(i, j); // получили цвет пикселя
            bytes.Add((byte)((pixel.R + pixel.G + pixel.B) / 3)); // нашли среднее значение
        }
    }
    var avarage = bytes.Average(b => b);
    System.Collections.BitArray bits = new System.Collections.BitArray(bytes.Select(b => b > avarage).ToArray());
    byte[] result = new byte[(int)Math.Round((double)bits.Count / 8)];
    bits.CopyTo(result, 0);
    base64_hash =  Convert.ToBase64String(result); // массив переводим в base64 строку - переменные в Зенно - строковые
    // return result; // возврат массива байт
}
return  base64_hash;
Я всё же предлагаю использовать какой-то другой хеш, например MD5.
Код, который ниже подсчитывает его, при чём что не мало важно - хеш который выдают другие программы (тотал например) одинаковый с тем, что выдает код (что позволяет уже от этого хеша отталкиваться например при сравнении изображений).
67201


C#:
string path = @"c:/printscreen.jpg";
string md5 = string.Empty;
using(Bitmap bm = new System.Drawing.Bitmap(path)){ // считали картинку по пути в оперативку
    byte[] data;
    using (var ms = new MemoryStream()) {
        bm.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        data = ms.ToArray();
    }
    using (var sec = new System.Security.Cryptography.MD5CryptoServiceProvider()) {       
        md5 = BitConverter.ToString(sec.ComputeHash(data));
    }
}
return  md5;
 
Последнее редактирование:
  • Спасибо
Реакции: Mudcrab, Shogo и one

Shogo

Client
Регистрация
07.04.2015
Сообщения
436
Благодарностей
93
Баллы
28
Спасибо огромное!! (Пытался ваш кворк купить - но не не продаётся уже :-) )
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 765
Благодарностей
2 407
Баллы
113
Спасибо огромное!! (Пытался ваш кворк купить - но не не продаётся уже :-) )
Я не предоставляю платные услуги уже где-то год.
Помогал решить проблему бесплатно (подпись в профиле осталась с тех времён когда на сигареты денег не хватало).
 

Shogo

Client
Регистрация
07.04.2015
Сообщения
436
Благодарностей
93
Баллы
28
Жалко )

Я не предоставляю платные услуги уже где-то год.
Помогал решить проблему бесплатно (подпись в профиле осталась с тех времён когда на сигареты денег не хватало).
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)