gpt4 book ai didi

java - 不同的文本但相同的 CRC 校验和?

转载 作者:搜寻专家 更新时间:2023-11-01 04:01:11 24 4
gpt4 key购买 nike

我的应用程序使用 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/

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