使用C#从在线图像(带有URL)中计算MD5哈希值

问题描述 投票:0回答:1

我需要计算在线图像的MD5哈希值

对于本地保存的图像,我尝试了此代码,它可以按预期工作

 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

感谢

c# image url buffer md5
1个回答
0
投票

使用WebClient类从给定地址下载数据。您有两种下载方式:

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 url = "TheAddressOfTheImage";
        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);
    }
}

...和呼叫者:

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

...或async呼叫者:

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

两个函数都返回FA544EB95534BA35AE9D6EA0B3889934,这是您的SO照片的计算得出的哈希值:)

© www.soinside.com 2019 - 2024. All rights reserved.