当前位置:  开发笔记 > 编程语言 > 正文

轻量级校验和算法的不错选择?

如何解决《轻量级校验和算法的不错选择?》经验,为你挑选了2个好方法。

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

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

它将由Javascript生成,因此需要在计算上相对较轻.

验证将由Java完成(虽然我看不出这实际上是一个问题).

它将采用中等长度的文本输入(URL编码的Unicode,我相信是ASCII); 通常约200-300个字符,在所有情况下都低于2000.

输出也应该是ASCII文本,越短越好.

我主要对轻量级的东西感兴趣,而不是让碰撞的绝对最小潜力成为可能.我是否天真地想象一个八字符哈希适合这个?我还应该澄清,如果在验证阶段没有发现腐败,那么这不是世界末日(而且我确实认识到这不会100%可靠),尽管我的其余代码对每个代码的效率都显着降低滑倒的腐败入境.

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

(请注意,我意识到网络传输不太可能对任何损坏错误负责,并且不会在此问题上折叠我的手臂;但是添加校验和验证会消除一个故障点,这意味着我们可以专注于其他方面如果再次发生这种情况.)



1> Mecki..:

CRC32在任何语言中都不难实现,它足以检测简单的数据损坏,并且在以良好的方式实现时,它非常快.但是你也可以尝试Adler32,它几乎和CRC32一样好,但它更容易实现(并且速度相同).

维基百科中的Adler32

CRC32 JavaScript实现示例

这两个(或者甚至两个)中的任何一个都可以用Java开箱即用.



2> derobert..:

是否知道TCP和UDP(以及IP,以太网和......)已经为传输中的数据提供校验和保护?

除非你做的事情非常奇怪,否则如果你看到腐败,那就是非常错误的.我建议从内存测试器开始.

此外,如果使用SSL/TLS,则会获得强大的数据完整性保护.


@dtsazza:我想知道恶意/恶作剧的用户谁可以破坏通过网络的数据包,但不能打败Javascript.或Adler32.
推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有