我正在从事一个对一些字符串进行哈希处理的项目。为了确保我总能得到正确的结果,我想在散列它们之前对它们进行归一化。 ... 并且有 Unicode 规范包。到目前为止,一切都很好。
我不想存储规范化形式,已经将数据存储在其原始来源中 - 我假设客户喜欢它。我希望多年后,如果我被要求计算相同字符串的哈希值,我会得到相同的结果。现在,如果标准得到改进或者存在使用最新版本的库修复的错误,将允许不同的结果。我不在乎之前的结果是否完美 - 我只想要相同的结果。
我的问题是:什么可能是强制一致性的好方法 - 避免我自己的实现。
最佳答案
您不能只存储文本的哈希值吗?这样,您甚至不必在需要时对它们进行归一化和计算。
如果您不能或不想:您不必使用最新版本的规范化包。您可以选择当前的最新版本(或您选择的任何提交),并将其放入 vendor 文件夹中。所以你也可以在几年后使用这个“固定”版本。有关销售详细信息,请参阅 Package version management in Go 1.5 .
想想看:如果norm
包被更改(例如,错误被修复)并产生不同的输出(规范化文本),如果没有产生旧输出的代码,你怎么能得到“旧”输出?只有使用旧版本的 norm
包。
另一方面,你说你需要计算哈希来验证数据没有被篡改。如果是这样,我看不到规范化的目的。如果原始文本被更改(例如它被“编辑”,但它并没有真正改变,只是以规范化的形式重新保存),您可以在没有规范化的情况下散列文本,这可以被视为“被篡改”。
关于go lang version-able 字符串规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839003/