java – 不同的文本,但CRC校验和相同?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 不同的文本,但CRC校验和相同?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1238字,纯文字阅读大概需要2分钟。
内容图文
![java – 不同的文本,但CRC校验和相同?](/upload/InfoBanner/zyjiaocheng/765/79cb938c6ca34911ba173550c4f77242.jpg)
我的应用程序使用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校验和相同?全部内容,希望文章能够帮你解决java – 不同的文本,但CRC校验和相同?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。