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)
如果我理解正确您想要将SHA1值指定为文件名,那么您可以检测您的集合中是否已有该图像.我不认为这是最好的方法(如果你没有运行数据库那么可能就是这样)但是,如果你计划拥有数百万张图像(出于实际原因),我认为碰撞是不可能的发生.
为此,我不推荐使用SHA256,因为主要的两个优点(抗冲击性+对一些理论攻击的免疫力)并不值得,因为它比SHA1慢了大约10倍(并且你将要散列很多相当大的文件) ).
你不应该害怕它的128位长度:为了有机会找到128位的碰撞,你需要在你的集合中有18446744073709600000个图像(sqrt为2 ^ 128).
哦,我不想听起来自负或任何东西,但哈希和加密是太不同的事情.事实上,我认为哈希更接近代码签名/数字签名而不是密码学.