为了保持一致性,我发现自己需要为一串数据生成校验和。广义的想法是客户端可以根据接收到的有效负载重新生成校验和,从而检测传输过程中发生的任何损坏。我隐约知道这种事情背后有各种各样的数学原理,如果你自己尝试滚动它,很容易出现细微的错误使整个算法失效。
因此,我正在寻找有关具有以下标准的散列/校验和算法的建议:
- 它将由 Javascript 生成,因此需要相对较轻的计算量。
- 验证将由 Java 完成(尽管我看不出这实际上是一个问题)。
- 它将采用中等长度的文本输入(URL 编码的 Unicode,我认为是 ASCII);通常大约 200-300 个字符,并且在所有情况下都低于 2000 个。
- 输出也应该是 ASCII 文本,越短越好。
我主要对轻量级的东西感兴趣,而不是获得绝对最小的碰撞可能性。我会天真地想象一个八字符的哈希会适合这个吗?我还应该澄清,如果在验证阶段没有发现损坏,这不是世界末日(而且我确实意识到这不会 100% 可靠),尽管我的其余代码对每个人来说效率明显较低漏掉的损坏条目。
编辑 - 感谢所有的贡献。我选择了 Adler32 选项,考虑到它在 Java 中得到原生支持,在 Javascript 中非常容易实现,两端计算速度快,输出 8 字节,完全符合我的要求。
(请注意,我意识到网络传输不太可能对任何损坏错误负责,并且暂时不会在这个问题上袖手旁观;但是添加校验和验证可以消除一个故障点,意味着我们可以专注于其他领域如果这种情况再次发生。)