Нужен хеш MD5 для в памяти System.Drawing.Image

Требуется хэш MD5 для хранения в памяти System.Drawing.Image

7
задан ThinkingStiff 30 January 2012 в 09:22
поделиться

3 ответа

Вот базовый фрагмент. См. Также комментарий @JaredReisinger для некоторых вопросов.

using System.Security.Cryptography;
using System.Text;
using System.Drawing.Imaging;
// ...

// get the bytes from the image
byte[] bytes = null;
using( MemoryStream ms = new MemoryStream() )
{
    image.Save(ms,ImageFormat.Gif); // gif for example
    bytes =  ms.ToArray();
}

// hash the bytes
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] hash = md5.ComputeHash(bytes);

// make a hex string of the hash for display or whatever
StringBuilder sb = new StringBuilder();
foreach (byte b in hash)
{
   sb.Append(b.ToString("x2").ToLower());
} 
6
ответ дан 7 December 2019 в 01:15
поделиться

Простой пример, основанный на примере в MSDN; обратите внимание, что этот хэш зависит от внутреннего представления изображения и не будет соответствовать хэшу, созданному из файла.

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static string getMd5Hash(byte[] buffer)
    {
        MD5 md5Hasher = MD5.Create();

        byte[] data = md5Hasher.ComputeHash(buffer);

        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        return sBuilder.ToString();
    }

    static byte[] imageToByteArray(Image image)
    {
        MemoryStream ms = new MemoryStream();
        image.Save(ms, ImageFormat.Bmp);
        return ms.ToArray();
    }

    static void Main(string[] args)
    {
        Image image = Image.FromFile(@"C:\tmp\Jellyfish.jpg");
        byte[] buffer = imageToByteArray(image);
        string md5 = getMd5Hash(buffer);
    }
}

Чтобы иметь возможность использовать класс MD5, необходимо добавить ссылку на System.Security.

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

3
ответ дан 7 December 2019 в 01:15
поделиться

Спасибо другим ребятам, которые ответили. Вот что я в итоге сделал:

MemoryStream ms = new MemoryStream()
image.Save(ms, ImageFormat.Png);
byte[] imgBytes = ms.ToArray();

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] hash = md5.ComputeHash(imgBytes);
string imageMD5 = BitConverter.ToString(hash).Replace("-", "").ToLower();
ms.Dispose();
1
ответ дан 7 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: