簡體   English   中英

從網上圖片計算MD5 hash

[英]Calculate the MD5 hash from an online image

我需要計算一個在線圖像的MD5 hash

對於本地保存的圖像,我嘗試了此代碼,它按預期工作:

public static string GetHashFromFile(string fileName, HashAlgorithm algorithm)
{
    HashAlgorithm MD5 = new MD5CryptoServiceProvider();
    using (var stream = new BufferedStream(File.OpenRead(fileName), 100000))
    {
        return BitConverter.ToString(MD5.ComputeHash(stream)).Replace("-", string.Empty);
    }
}

如何獲取在線文件的 BufferedStream?

使用WebClient class 從給定地址下載數據。 使用下載的字節數組創建一個MemoryStream object 作為BufferedStream object 的源 stream。

您有兩種下載方式:

1.同步方式

static string GetHashFromUrl(string url)
{
    using (var wc = new WebClient())
    {
        var bytes = wc.DownloadData(url);

        using (var md5 = new MD5CryptoServiceProvider())
        using (var ms = new MemoryStream(bytes))
        using (var bs = new BufferedStream(ms, 100_000))
            return BitConverter.ToString(md5.ComputeHash(bs)).Replace("-", string.Empty);
    }
}

...和一個來電者:

void TheCaller()
{
    try
    {
        var hash = GetHashFromUrl(url);
        //...
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }            
}

2.異步方式

static async Task<string> GetHashFromUrlAsync(string url)
{
    using (var wc = new WebClient())
    using (var md5 = new MD5CryptoServiceProvider())
    {
        byte[] bytes = await wc.DownloadDataTaskAsync(url);
                
        using (var ms = new MemoryStream(bytes))
        using (var bs = new BufferedStream(ms, 100_000))
            return BitConverter.ToString(md5.ComputeHash(bs)).Replace("-", string.Empty);
    }
}

...和一個async調用者:

async void TheCaller()
{
    try
    {
        var hash = await Task.Run(() => GetHashFromUrlAsync(url));
        //...
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }            
}

這兩個函數都為這張照片返回FA544EB95534BA35AE9D6EA0B3889934 hash,它的地址分配給調用者中的url變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM