go lang version-able 字符串规范化

标签 go unicode

我正在从事一个对一些字符串进行哈希处理的项目。为了确保我总能得到正确的结果,我想在散列它们之前对它们进行归一化。 ... 并且有 Unicode 规范包。到目前为止,一切都很好。

我不想存储规范化形式,已经将数据存储在其原始来源中 - 我假设客户喜欢它。我希望多年后,如果我被要求计算相同字符串的哈希值,我会得到相同的结果。现在,如果标准得到改进或者存在使用最新版本的库修复的错误,将允许不同的结果。我不在乎之前的结果是否完美 - 我只想要相同的结果。

我的问题是:什么可能是强制一致性的好方法 - 避免我自己的实现。

最佳答案

您不能只存储文本的哈希值吗?这样,您甚至不必在需要时对它们进行归一化和计算。

如果您不能或不想:您不必使用最新版本的规范化包。您可以选择当前的最新版本(或您选择的任何提交),并将其放入 vendor 文件夹中。所以你也可以在几年后使用这个“固定”版本。有关销售详细信息,请参阅 Package version management in Go 1.5 .

想想看:如果norm包被更改(例如,错误被修复)并产生不同的输出(规范化文本),如果没有产生旧输出的代码,你怎么能得到“旧”输出?只有使用旧版本的 norm 包。

另一方面,你说你需要计算哈希来验证数据没有被篡改。如果是这样,我看不到规范化的目的。如果原始文本被更改(例如它被“编辑”,但它并没有真正改变,只是以规范化的形式重新保存),您可以在没有规范化的情况下散列文本,这可以被视为“被篡改”。

关于go lang version-able 字符串规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839003/

相关文章:

json - golang json迭代不支持索引

go - go modules 如何与可安装命令一起使用?

c - 如何在 Win32 命令行应用程序中将 argv 转换为宽字符?

Oracle 无法将数据插入 varchar2(4000 char) 列

git + go - 如何使用 go get 处理子项目

go -/usr/lib/golang/src和/usr/lib/golang/pkg之间是什么关系

Python:.encode ('ascii' , 'ignore' ) 是做什么的?

javascript - 将 Unicode 转义序列转换为符号,并转储到 dom 节点

java如何写0x13 unicode字符?

vim - 戈朗 : why does terminal stdout not print out utf-8 characters?