- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的应用程序使用 CRC32 来检查两个内容或两个文件是否相同。但是当我尝试使用它来生成唯一 ID 时,我看到了问题,对于两个不同的字符串,CRC32 可以相同。这是我的 Java 代码。提前致谢。
public static String getCRC32(String content) {
byte[] bytes = content.getBytes();
Checksum checksum = new CRC32();
checksum.update(bytes, 0, bytes.length);
return String.valueOf(checksum.getValue());
}
public static void main(String[] args){
System.out.println(getCRC32("b5a7b602ab754d7ab30fb42c4fb28d82"));
System.out.println(getCRC32("d19f2e9e82d14b96be4fa12b8a27ee9f"));
}
最佳答案
是的,这就是 CRC 的样子。它们不是唯一的 ID。对于不同的输入,它们可能是不同的,但它们必须是不同的。毕竟,您要提供超过 32 位的输入,所以您不能期望有超过 232 个不同的输入来产生不同的 CRC。
更长的加密哈希(例如 SHA-256)远更有可能为不同的输入提供不同的输出,但这仍然不是不可能的(并且不可能,由于输入的数量)数据与输出数据)。 CRC 和加密散列之间的最大区别在于,如果您愿意,CRC 相对容易“操纵”- 发现冲突并不难,而且它用于防止意外数据损坏.加密哈希旨在防止某些攻击者故意损坏数据 - 因此很难故意创建针对特定哈希的值。
顺便说一句,您在未指定字符集的情况下使用 String.getBytes()
是有问题的 - 它使用平台默认编码,因此如果您在两台具有相同编码的机器上运行相同的代码输入,你会得到不同的结果。我强烈建议您使用固定编码(例如 UTF-8)。
关于java - 不同的文本但相同的 CRC 校验和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27291131/
如何在 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 的包 ?
我是一名优秀的程序员,十分优秀!