将图像存储为哈希码C#

Les*_*nes 3 .net c# hash image

我正在建立一个网站,将存储数百万图像,所以我需要每个图像的唯一ID.什么密码术最适合存储图像.现在这是我的代码看起来像使用SHA1.

是否在sha1旁边使用了标准哈希,两个图像是否可能具有相同的哈希码?

 Image img = Image.FromFile("image.jpg");

 ImageConverter converter = new ImageConverter();
 byte[] byteArray = (byte[])converter.ConvertTo(img, typeof(byte[]));

 string hash;

 using (SHA1CryptoServiceProvidersha1 = new SHA1CryptoServiceProvider())
 {
     hash = Convert.ToBase64String(sha1.ComputeHash(byteArray));
 }
Run Code Online (Sandbox Code Playgroud)

Gas*_*a79 5

如果我理解正确您想要将SHA1值指定为文件名,那么您可以检测您的集合中是否已有该图像.我不认为这是最好的方法(如果你没有运行数据库那么可能就是这样)但是,如果你计划拥有数百万张图像(出于实际原因),我认为碰撞是不可能的发生.

为此,我不推荐使用SHA256,因为主要的两个优点(抗冲击性+对一些理论攻击的免疫力)并不值得,因为它比SHA1慢了大约10倍(并且你将要散列很多相当大的文件) ).

你不应该害怕它的128位长度:为了有机会找到128位的碰撞,你需要在你的集合中有18446744073709600000个图像(sqrt为2 ^ 128).

哦,我不想听起来自负或任何东西,但哈希和加密是太不同的事情.事实上,我认为哈希更接近代码签名/数字签名而不是密码学.