【C# 由GUID引发的关于物质唯一性的思考】 应该用md5, 或者crc 算法,算出验证码。 验证文件是否发生变更! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为Image生成MD5?能保证相同的Image(包括名称或路径不同的哦)生成的是唯一的么? 做MD5或者SHA-1的Hash就可以办到。现在Microsoft发行光盘镜像为了防止被篡改,就会公布一个文件的Hash,相当于文件指纹。但是这种唯一不是绝对意义上的唯一,但是确实是现实生活中的唯一,前提是碰撞算法没有被发现。根据信息论,如果要构造真正意义上的唯一,编码的长度会很长。 CRC严重不行。不要误导初学者。CRC的碰撞概率极高。 byte[] imgScanDocBytes = new byte[0]; int iImgSize = 0; if (File.Exists(PathFile)) { try { FileStream objStream = File.Open(PathFile, FileMode.Open, FileAccess.Read); imgScanDocBytes = new byte[objStream.Length]; iImgSize = objStream.Read(imgScanDocBytes, 0, (int)objStream.Length); objStream.Close(); } catch { MessageBox.Show("读取文件时出错!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return -1; } } else { MessageBox.Show("没有选择文件或所选文件不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return -1; } string sMd5Code = String.Empty; System.Security.Cryptography.HashAlgorithm algorithm = System.Security.Cryptography.MD5.Create(); sMd5Code = ClsMd5Check.ByteArrayToHexString(algorithm.ComputeHash(imgScanDocBytes)); 只要图片的数据信息相同就可以,比如:我现在有张C:\c.bmp,然后我将它复制到D盘下,并修改了名称为:d.bmp,并未对图片数据信息做任何修改(比如修改图片明、暗、对比度属性等)我希望这两张图片所得到的GUID是相同的 MD5可以么? 但是要明白2点:(1)MD5摘要和GUID格式略有不同(2)MD5摘要并非严格意义上的唯一。存在2个文件内容不同,但是摘要相同的可能性,虽然自然情况下绝对不可能发生,但是实验室条件下精心构造是有可能的。 11楼的程序从网上copy的吧 不全吧? Datatable中的记录去重 C#中有关com接口的定义 C#利用datagridview更新Access数据库的问题 急!结构体 索引器,hashTable性能效率问题?? C# 关于数据库添加的问题 如何获得一个字符串中指定位置的字符? Socket传输的时候,缓冲区容量不足的情况如何处理,请大家帮忙 关于字窗口切换时的问题,在线等! 求救!!.net com interop注册的问题. C#字节数组和字符串相互转换 public static IEnumerable SimpleList() 提示错误IEnumerable 是命名空间。但此处当作类型使用 提示窗口的问题
现在Microsoft发行光盘镜像为了防止被篡改,就会公布一个文件的Hash,相当于文件指纹。
但是这种唯一不是绝对意义上的唯一,但是确实是现实生活中的唯一,前提是碰撞算法没有被发现。根据信息论,如果要构造真正意义上的唯一,编码的长度会很长。
int iImgSize = 0; if (File.Exists(PathFile))
{
try
{
FileStream objStream = File.Open(PathFile, FileMode.Open, FileAccess.Read);
imgScanDocBytes = new byte[objStream.Length];
iImgSize = objStream.Read(imgScanDocBytes, 0, (int)objStream.Length);
objStream.Close();
}
catch
{
MessageBox.Show("读取文件时出错!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return -1;
}
}
else
{
MessageBox.Show("没有选择文件或所选文件不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return -1; }
string sMd5Code = String.Empty;
System.Security.Cryptography.HashAlgorithm algorithm = System.Security.Cryptography.MD5.Create();
sMd5Code = ClsMd5Check.ByteArrayToHexString(algorithm.ComputeHash(imgScanDocBytes));
(1)MD5摘要和GUID格式略有不同
(2)MD5摘要并非严格意义上的唯一。存在2个文件内容不同,但是摘要相同的可能性,虽然自然情况下绝对不可能发生,但是实验室条件下精心构造是有可能的。