c# – 创建上传图像的md5哈希值

c# – 创建上传图像的md5哈希值,第1张

概述我正在尝试从用户在我的Web应用程序上传图像的字节数组中创建一个md5字符串. 这是因为我希望图像分散在不同的文件夹中. 而且我不必使用userID作为文件夹名称.看起来更专业. 结果将是这样的: /images/ 'first-two-char-of-md5' / 'the-complete-md5-string'.[jpg,png,bmp....] 这听起来像处理图像的好方法吗? 所以. 我 @H_419_2@ 我正在尝试从用户在我的Web应用程序上传的图像的字节数组中创建一个md5字符串.
这是因为我希望图像分散在不同的文件夹中.
而且我不必使用userID作为文件夹名称.看起来更专业.

结果将是这样的:

/images/ 'first-two-char-of-md5' / 'the-complete-md5-string'.[jpg,png,bmp....]

这听起来像处理图像的好方法吗?

所以.
我的代码(来自互联网的东西.):

protected voID btnUpload_Click(object sender,EventArgs e)    {        if (fileUpload1.Hasfile)        {            if (CheckfileType(fileUpload1.filename))            {                const int BUFFER_SIZE = 255;                Byte[] Buffer = new Byte[BUFFER_SIZE];                Stream theStream = fileUpload1.Postedfile.inputStream;                nBytesRead = theStream.Read(Buffer,BUFFER_SIZE);                System.Text.ASCIIEnCoding ASCIIEnCoding = new ASCIIEnCoding();                System.Text.UTF8EnCoding utf8 = new UTF8EnCoding();                //Just trying some stuff to see the output...                Label1.Text =  ASCIIEnCoding.GetString(CalculateMD5(theStream)) + "<br>" + utf8.GetString(CalculateMD5(theStream)) + "<br>" + Convert.ToBase64String(CalculateMD5(theStream));             }       }  }private static byte[] _emptyBuffer = new byte[0];    public static byte[] CalculateMD5(Stream stream)    {        return CalculateMD5(stream,64 * 1024);    }    public static byte[] CalculateMD5(Stream stream,int bufferSize)    {        MD5 md5Hasher = MD5.Create();        byte[] buffer = new byte[bufferSize];        int readBytes;        while ((readBytes = stream.Read(buffer,bufferSize)) > 0)        {            md5Hasher.transformBlock(buffer,readBytes,buffer,0);        }        md5Hasher.transformFinalBlock(_emptyBuffer,0);        return md5Hasher.Hash;    }

结果.我从“calculateMD5()”获得一些输出,但是当我试图将它放到label1时.看看发生了什么.只有一堆奇怪的角色.
我在这做错了什么?我希望它是HTMLsafe … a-z,A-Z,仅限0-9.

解决方法 散列作为字节数组返回.您需要将其转换为人类可读的形式,例如73868cb1848a216984dca1b6b0ee37bc.您可以使用以下内容:

var s = new StringBuilder();foreach (byte b in md5Hasher.Hash)    s.Append(b.ToString("x2").Tolower());return s.ToString();

这将遍历从散列 *** 作返回的字节列表,并将每个字节转换为十六进制.您可以在format strings you can use for the byte type on MSDN上找到更多信息.

回答你问题的第一部分:

Does this sound as a good solution to handle the images?

它应该足够了,但如果2个用户上传相同的图像,那么它将产生相同的哈希值.您可以尝试使用用户名和可能的时间戳来缓存数据以缓解此问题.

您还需要进行一些检查,因为即使概率非常小,您也可能为不同的图像/用户生成相同的哈希(“碰撞”),并且您不希望用户覆盖其他用户的图像.您可以通过生成图像的哈希,检查它是否已经存在来防止这种情况,如果存在,则向预先哈希的数据添加一些字节,重复直到哈希是唯一的.

@H_419_2@ 总结

以上是内存溢出为你收集整理的c# – 创建上传图像的md5哈希值全部内容,希望文章能够帮你解决c# – 创建上传图像的md5哈希值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1222084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存