当前位置: 首页 > 面试题库 >

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

梁嘉祥
2023-03-14
问题内容

我发现自己需要为数据字符串生成校验和,以实现一致性。广泛的想法是,客户端可以根据接收到的有效载荷来重新生成校验和,从而检测到传输中发生的任何损坏。我模糊地意识到,这种事情背后存在着各种各样的数学原理,如果您自己动手操作,细微的错误很容易使整个算法失效。

因此,我正在寻找符合以下条件的哈希/校验和算法的建议:

  • 它将由Javascript生成,因此在计算上需要相对较少。
  • 验证将由Java完成(尽管我看不到这实际上是一个问题)。
  • 它将采用适当长度的文本输入(URL编码的Unicode,我认为是ASCII);通常在200-300个字符左右,并且在所有情况下都在2000以下。
  • 输出也应该是ASCII文本,并且它越短越好。

我主要是对轻量级产品感兴趣,而不是尽可能避免发生碰撞的可能性最小。我会天真地想象一个八字符的哈希值适合于此吗?我还应该澄清,如果在验证阶段没有发现腐败,这还不是世界末日(我确实意识到这不会100%可靠),尽管我的其余代码对于每个人而言效率明显较低漏进的腐败条目。

编辑-
感谢所有的贡献。我选择了Adler32选项,并考虑到它在Java中是本机支持的,在Javascript中非常容易实现,在两端都可以快速计算,并具有8字节输出,这完全符合我的要求。

(请注意,我意识到网络传输不太可能导致任何损坏错误,并且还不会对此问题袖手旁观;但是,添加校验和验证可以消除一个故障点,这意味着我们可以专注于其他领域应该再次发生。)


问题答案:

CRC32并不是很难用任何一种语言来实现,它足以检测简单的数据损坏,并且以良好的方式被执行时,它非常快。但是,您也可以尝试Adler32,它几乎和CRC32一样好,但是实现起来更容易(而且速度差不多)。

维基百科中的Adler32

CRC32 JavaScript实现示例

这两个(或什至两者)中的任何一个都可以直接用Java获得。



 类似资料:
  • Jenkins Pipeline插件有一个称为“轻量级签出”的功能,其中主服务器仅从repo中提取Jenkinsfile,而不是整个repo。配置屏幕中有一个相应的复选框。我想在多分支管道中进行轻量级签出,但我在多分支配置屏幕中没有看到复选框。有什么想法如何实现这一点吗?我注意到一些关闭的问题表明此功能可用,但我无法找到任何有关如何实现它的细节。 相关资料: https://issues.jenk

  • null 解压缩算法的重要指标是数据的大小加上算法的大小(因为它们将驻留在相同的有限内存中)。 可用于解压的RAM很少;可以将单个字形的数据解压缩到RAM中,但不能更多。 为了使事情变得更加困难,算法必须在32位微控制器(ARM Cortex-M core)上非常快,因为字形在被绘制到显示器上时需要解压缩。每八位元组十个或二十个机器循环是可以的,一百个肯定太多了。 为了使事情变得更容易,完整的数据

  • 本文向大家介绍超好用轻量级MVC分页控件JPager.Net,包括了超好用轻量级MVC分页控件JPager.Net的使用技巧和注意事项,需要的朋友参考一下 JPager.Net  MVC好用的轻量级分页控件,好用到你无法想象,轻量到你无法想象。 JPager.Net  MVC好用的轻量级分页控件,实现非常简单,使用也非常简单。 JPager.Net  MVC好用的轻量级分页控件,代码精心推敲,经多

  • 我正在使用iTextSharp从PDF文件中读取文本。然而,有些时候我不能提取文本,因为PDF文件只包含图像。我每天下载同样的PDF文件,我想看看PDF是否被修改过。如果无法获得文本和修改日期,那么MD5校验和是判断文件是否已更改的最可靠方法吗? 如果是的话,一些代码示例将会很感激,因为我对密码学没有太多的经验。

  • 本文向大家介绍C++计算ICMP头的校验和实例,包括了C++计算ICMP头的校验和实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++计算ICMP头的校验和的方法,分享给大家供大家参考。具体实现代码如下: 希望本文所述对大家的C++程序设计有所帮助。

  • 使用Java /Spring运行Liquibase以对抗Snowflake数据库。第一个部署工作正常,我让Liquibase创建数据库变更日志表和数据库变更日志锁定表。它们被创建、写入并创建数据库对象。 我第二次尝试运行它时,它将获得更改日志锁,但随后会在liquibase中长时间处于静止状态。util:xxxx的计算校验和。然后在5分钟后超时(由于其他配置设置)。如果我删除DatabaseCha