gpt4 book ai didi

java - 轻量级校验和算法的好选择?

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:33 28 4
gpt4 key购买 nike

为了保持一致性,我发现自己需要为一串数据生成校验和。广泛的想法是,客户端可以根据收到的有效负载重新生成校验和,从而检测传输过程中发生的任何损坏。我隐约意识到这种事情背后有各种各样的数学原理,如果你自己动手的话,很容易出现细微的错误导致整个算法失效。

所以我正在寻找具有以下标准的散列/校验和算法的建议:

  • 它将由 Javascript 生成,因此计算量相对较小。
  • 验证将由 Java 完成(尽管我看不出这实际上是一个问题)。
  • 它将采用中等长度的文本输入(URL 编码的 Unicode,我认为是 ASCII);通常大约 200-300 个字符,在所有情况下都低于 2000 个字符。
  • 输出也应该是ASCII文本,越短越好。

我主要对轻量级的东西感兴趣,而不是获得尽可能小的碰撞可能性。我是否会天真地认为八个字符的哈希值适用于此?我还应该澄清,如果在验证阶段没有发现损坏,那不是世界末日(我确实意识到这不是 100% 可靠的),尽管我的其余代码对于每个代码的效率都明显较低漏掉的腐败条目。

编辑 - 感谢所有贡献者。我选择了 Adler32 选项,因为它在 Java 中得到原生支持,在 Javascript 中非常容易实现,两端计算速度快,并且具有 8 字节输出,这完全符合我的要求。

(请注意,我意识到网络传输不太可能对任何损坏错误负责,并且暂时不会在这个问题上袖手旁观;但是添加校验和验证可以消除一个故障点,这意味着我们可以集中精力如果这种情况再次发生在其他地区。)

最佳答案

CRC32 在任何语言中都不太难实现,它足以检测简单的数据损坏,如果以良好的方式实现,它会非常快。不过,您也可以尝试 Adler32,它几乎与 CRC32 一样好,但它更容易实现(而且速度差不多)。

Adler32 in the Wikipedia

CRC32 JavaScript implementation sample

这两个(或者甚至两个)都可以在 Java 中开箱即用。

关于java - 轻量级校验和算法的好选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/421419/

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