Java 如何使用CRC32?

Java 如何使用CRC32?,java,crc32,Java,Crc32,当我阅读此链接时: 有一种方法可以从字节数组中获取CRC32值。但是,当我将此CRC32ed值发送给接收方时,接收方如何检查此值是否有效?的想法是,接收方将对您发送的数据运行相同的算法,并且应获得相同的CRC32值。如果没有,则数据(或CRC)已以某种方式损坏 换句话说,假设您的有效载荷是“Pax是一个非常英俊的家伙”,您将CRC计算为42 您通过该有效负载和CRC发送到接收端,它对有效负载执行相同的操作,也会产生42 这意味着有效载荷的内容是正确的。但不一定是真实性:-) 这就是CRC的意思,

当我阅读此链接时:
有一种方法可以从字节数组中获取CRC32值。但是,当我将此CRC32ed值发送给接收方时,接收方如何检查此值是否有效?

的想法是,接收方将对您发送的数据运行相同的算法,并且应获得相同的CRC32值。如果没有,则数据(或CRC)已以某种方式损坏

换句话说,假设您的有效载荷是“Pax是一个非常英俊的家伙”,您将CRC计算为42

您通过该有效负载和CRC发送到接收端,它对有效负载执行相同的操作,也会产生42

这意味着有效载荷的内容是正确的。但不一定是真实性:-)

这就是CRC的意思,循环冗余检查。



请记住,CRC往往对有效载荷的意外损坏有效,但是,除非有一些秘密信息用于生成检查,否则它可能是伪造的。

这个想法是,接收器将对您发送的数据运行相同的算法,并且应该获得相同的CRC32值。如果没有,则数据(或CRC)已以某种方式损坏

换句话说,假设您的有效载荷是“Pax是一个非常英俊的家伙”,您将CRC计算为42

您通过该有效负载和CRC发送到接收端,它对有效负载执行相同的操作,也会产生42

这意味着有效载荷的内容是正确的。但不一定是真实性:-)

这就是CRC的意思,循环冗余检查。



请记住,CRC往往对有效载荷的意外损坏有效,但是,除非有一些秘密信息用于生成检查,否则它可能是伪造的。

有一个很大的警告:CRC32实际上仅用于检测意外损坏。如果您试图检测篡改,那么这是一个糟糕的选择。即使是SHA256也不够,如果没有在签名中使用它。CRC32的主要卖点是它的速度很快。@大卫,是的,任何已知的输入算法(消息和用于生成元数据的任何键)都可能被伪造。数字签名之所以有效,是因为存在隐藏信息(例如私钥)。如果您将消息和CRC分开,并保持对CRC的控制(例如将其发布在您的安全网站上,如ISOs的MD5SUMs),则会更安全。并非完全安全,因为仍然有方法生成具有相同CRC的任意消息,但更难。通过使用CRC和消息长度作为签名,您可以使其更加困难。但是,你是对的,没有秘密,它是可以伪造的。但是我要补充完整性的警告:-)有一个很大的警告:CRC32确实只在检测意外腐败时才可靠。如果您试图检测篡改,那么这是一个糟糕的选择。即使是SHA256也不够,如果没有在签名中使用它。CRC32的主要卖点是它的速度很快。@大卫,是的,任何已知的输入算法(消息和用于生成元数据的任何键)都可能被伪造。数字签名之所以有效,是因为存在隐藏信息(例如私钥)。如果您将消息和CRC分开,并保持对CRC的控制(例如将其发布在您的安全网站上,如ISOs的MD5SUMs),则会更安全。并非完全安全,因为仍然有方法生成具有相同CRC的任意消息,但更难。通过使用CRC和消息长度作为签名,您可以使其更加困难。但是,你是对的,没有秘密,它是可以伪造的。但我要补充完整性的警告:-)