首页 / C# / c# – 创建上传图像的md5哈希值
c# – 创建上传图像的md5哈希值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 创建上传图像的md5哈希值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2408字,纯文字阅读大概需要4分钟。
内容图文
![c# – 创建上传图像的md5哈希值](/upload/InfoBanner/zyjiaocheng/760/3c1dc90b6dda4d13b15b8b4f5e706efc.jpg)
我正在尝试从用户在我的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, 0, 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, 0, bufferSize)) > 0)
{
md5Hasher.TransformBlock(buffer, 0, readBytes, buffer, 0);
}
md5Hasher.TransformFinalBlock(_emptyBuffer, 0, 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个用户上传相同的图像,那么它将产生相同的哈希值.您可以尝试使用用户名和可能的时间戳来缓存数据以缓解此问题.
您还需要进行一些检查,因为即使概率非常小,您也可能为不同的图像/用户生成相同的哈希(“碰撞”),并且您不希望用户覆盖其他用户的图像.您可以通过生成图像的哈希,检查它是否已经存在来防止这种情况,如果存在,则向预先哈希的数据添加一些字节,重复直到哈希是唯一的.
内容总结
以上是互联网集市为您收集整理的c# – 创建上传图像的md5哈希值全部内容,希望文章能够帮你解决c# – 创建上传图像的md5哈希值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。