- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
为了保持一致性,我发现自己需要为一串数据生成校验和。广泛的想法是,客户端可以根据收到的有效负载重新生成校验和,从而检测传输过程中发生的任何损坏。我隐约意识到这种事情背后有各种各样的数学原理,如果你自己动手的话,很容易出现细微的错误导致整个算法失效。
所以我正在寻找具有以下标准的散列/校验和算法的建议:
我主要对轻量级的东西感兴趣,而不是获得尽可能小的碰撞可能性。我是否会天真地认为八个字符的哈希值适用于此?我还应该澄清,如果在验证阶段没有发现损坏,那不是世界末日(我确实意识到这不是 100% 可靠的),尽管我的其余代码对于每个代码的效率都明显较低漏掉的腐败条目。
编辑 - 感谢所有贡献者。我选择了 Adler32 选项,因为它在 Java 中得到原生支持,在 Javascript 中非常容易实现,两端计算速度快,并且具有 8 字节输出,这完全符合我的要求。
(请注意,我意识到网络传输不太可能对任何损坏错误负责,并且暂时不会在这个问题上袖手旁观;但是添加校验和验证可以消除一个故障点,这意味着我们可以集中精力如果这种情况再次发生在其他地区。)
最佳答案
CRC32 在任何语言中都不太难实现,它足以检测简单的数据损坏,如果以良好的方式实现,它会非常快。不过,您也可以尝试 Adler32,它几乎与 CRC32 一样好,但它更容易实现(而且速度差不多)。
CRC32 JavaScript implementation sample
这两个(或者甚至两个)都可以在 Java 中开箱即用。
关于java - 轻量级校验和算法的好选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/421419/
如何在 PHP 中生成 CRC-8 校验和? 最佳答案 function crcnifull ($dato, $byte) { static $PolyFull=0x8c; for ($i=0
我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试打印执行 CRC 操作的 XOR 函数的返回值时,它总是打印 0。我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚! 这是我的
ThinkPHP3.2.3验证码显示、刷新、校验 ,具体如下: 显示验证码 首先在Home/Controller下创建一个公共控制器PublicController
我想将自定义验证绑定(bind)到 TimePicker 自定义控件,但下面的代码显示“无法将内容添加到 TimePicker 的对象类型。”。
目录 Spring 校验(validator,JSR-303)实现 什么是JSR-303规范 与Spring MVC结合 实体类添加
导包和配置 导入 JSR 303 的包、hibernate valid 的包 ?
我是一名优秀的程序员,十分优秀!