gpt4 book ai didi

c# - 计算字符串的校验和

转载 作者:IT王子 更新时间:2023-10-29 04:29:26 27 4
gpt4 key购买 nike

我得到了一个任意长度的字符串(比如 5 到 2000 个字符),我想为其计算校验和。

要求

  • 每次对字符串进行计算时必须返回相同的校验和
  • 校验和必须是唯一的(无冲突)
  • 我无法存储以前的 ID 来检查冲突

我应该使用哪种算法?

更新:

  • 有没有合理独特的方法?即发生碰撞的可能性非常小。
  • 校验和应该是字母数字
  • 字符串是unicode
  • 字符串实际上是应该翻译的文本,校验和与每个翻译一起存储(因此翻译后的文本可以与原始文本匹配)。
  • 校验和的长度对我来说不重要(越短越好)

更新2

假设我得到了以下字符串 “欢迎来到这个网站。使用上面华丽但无用的菜单进行导航”

字符串在 View 中的使用方式类似于 linux 中的 gettext。即用户只是写(在 Razor View 中)

@T("Welcome to this website. Navigate using the flashy but useless menu above")

现在我需要一种方法来标识该字符串,以便我可以从数据源中获取它(数据源有多种实现)。必须使用整个字符串作为键似乎有点低效,因此我正在寻找一种从中生成键的方法。

最佳答案

那是不可能的。

如果您不能存储以前的值,则无法创建小于字符串中信息的唯一校验和。

更新:

“相当独特”这个词没有意义,要么是独特的,要么不是。

要获得相当低的哈希冲突风险,您可以使用相当大的哈希码。

例如,MD5 算法会生成一个 16 字节的哈希码。使用某种保留所有字符的编码将字符串转换为字节数组,例如 UTF-8,使用 MD5 类计算哈希码,然后使用 将哈希码字节数组转换为字符串code>BitConverter类:

string theString = "asdf";

string hash;
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create()) {
hash = BitConverter.ToString(
md5.ComputeHash(Encoding.UTF8.GetBytes(theString))
).Replace("-", String.Empty);
}

Console.WriteLine(hash);

输出:

912EC803B2CE49E4A541068D495AB570

关于c# - 计算字符串的校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9837732/

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