gpt4 book ai didi

asp.net - 一种在 ASP.NET 中生成图像签名或哈希值以进行重复检测的方法?

转载 作者:行者123 更新时间:2023-12-03 07:49:41 25 4
gpt4 key购买 nike

我运行一个相当大的网站,我的成员每天都会添加数千张图像。显然有很多重复,我只是想知道在上传图像期间我是否可以以某种方式生成图像的签名或哈希,以便我可以存储它。每次有人上传图片时,我都会简单地检查此签名是否已存在,并引发错误,指出此图像已存在。不确定 ASP.NET 是否已经存在这种技术,但我知道tineye.com 已经这样做了。

如果您认为可以提供帮助,我将不胜感激您的意见。

克里斯

最佳答案

您可以使用任何派生的哈希算法从文件的字节数组生成哈希。通常使用 MD5,但您可以用它替换 System.Security.Cryptography 命名空间中提供的任何内容。这适用于任何二进制文件,而不仅仅是图像。

许多网站在您下载文件时提供 MD5 哈希值,以验证您是否已正确下载文件。例如,当您收到整个 ISO CD/DVD 镜像时,可能会丢失字节。下载文件后,您可以为其生成哈希值,并确保它与网站所说的相同。如果所有结果都比较,您就得到了精确的副本。

我可能会使用类似的东西:

public static class Helpers
{
//If you're running .NET 2.0 or lower, remove the 'this' keyword from the
//method signature as 2.0 doesn't support extension methods.
static string GetHashString(this byte[] bytes, HashAlgorithm cryptoProvider)
{
byte[] hash = cryptoProvider.ComputeHash(bytes);
return Convert.ToBase64String(hash);
}
}

要求:

using System.Security.Cryptography;

调用使用:

byte[] bytes = File.ReadAllBytes("FilePath");
string filehash = bytes.GetHashString(new MD5CryptoServiceProvider());

或者如果您在 .NET 2.0 或更低版本中运行:

string filehash = Helpers.GetHashString(File.ReadAllBytes("FilePath"), new MD5CryptoServiceProvider());

如果您决定使用不同的哈希方法而不是 MD5,以获得极小的冲突概率:

string filehash = bytes.GetHashString(new SHA1CryptoServiceProvider());

这样,您的 has 方法就不是特定于加密提供商的,如果您决定要更改正在使用的加密提供商,只需将不同的加密提供商注入(inject)到 cryptoProvider 参数中即可。

您只需更改传入的服务提供商即可使用任何其他哈希类:

string md5Hash = bytes.GetHashString(new MD5CryptoServiceProvider());
string sha1Hash = bytes.GetHashString(new SHA1CryptoServiceProvider());
string sha256Hash = bytes.GetHashString(new SHA256CryptoServiceProvider());
string sha384Hash = bytes.GetHashString(new SHA384CryptoServiceProvider());
string sha512Hash = bytes.GetHashString(new SHA512CryptoServiceProvider());

关于asp.net - 一种在 ASP.NET 中生成图像签名或哈希值以进行重复检测的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1835155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com