Ale*_*sen 3 algorithm hash gzip crc digital-signature
背景: 我最近一直在使用gzip压缩文件进行大量的工作.我在阅读Python zlib文档时发现的一件有趣的事情是声称CRC不应该用作通用哈希算法.这让我想知道,如果CRC不是一般的哈希算法,它的重点是什么?检查平等不是重点吗?
zip文件中的CRC主要用于确保文件在存储或传输过程中不被损坏.它不用于提供真实性或防止攻击者更改文件.因此不需要加密安全性.
加密哈希确实提供了相同或更好的防止完整性故障的保护.然而,它们更加计算密集,并且需要更大的输出.如果散列的输出减少太多,则CRC实际上可以提供对(随机)变化的更好检测.
由于CRC值无法防止故意更改 - 因此找到会产生相同CRC值的文件并不困难 - 它不适合数字签名.对于您这样做需要一个密码散列.
请注意,加密哈希不是签名.对于签名,您需要一个数字签名应用程序,如PGP.数字签名(通常)由散列组成,然后使用来自私钥的信息(由接收方的公钥验证)处理.
注意:有时候"签名"这个词的意思是"指纹".指纹加密哈希-主要是MD5或SHA-1 是仍在使用.但在我看来,这是一个相当遥远的问题 - 错误地使用了"签名"这个词.
您在那里询问了四到五个不同的问题,并在上下文中使用了一大堆不同的,有时含糊不清的术语.最好在问答网站上一次提出一个明确的问题.
CRC擅长错误检测,计算速度相对较快.输入比特在CRC中很好地分布,并且还具有良好的突发错误检测能力.这就是为什么.目前尚不清楚"通用散列算法"是什么意思(仅适用于散列表?或加密强大?).在任何情况下,目的不是为了制作文件的查找表,也不是为了对数据进行签名.无论如何在gzip文件中加密加密哈希(例如MD5或SHA-2)都没有价值,因为有人可以简单地更改数据和哈希值!任何人都可以生成的哈希仅在您通过其他渠道获取哈希时才有用.
通过"代码字",我从链接中推测你的意思是CRC.CRC是快速计算的错误检查代码,在硬件和软件应用程序中实现,以检查数据的完整性.从上下文来看,当你说数字签名时,我认为你的意思是加密哈希.加密哈希是一种单向函数,旨在使创建具有给定哈希值的消息极其困难.CRC恰恰相反.作为线性函数,修改消息以获得任何给定的CRC非常容易.加密散列通常具有比CRC更多的位,以便实际上不可能发生意外碰撞的概率.然而,单向和多位使得加密散列生成的计算密集程度更高.
那是正确的.虽然CRC很好地将输入位分配到值中并且可以成功地用作散列,但是它可能会使您可能希望传递散列算法的某些测试失败.如果您希望算法从密钥创建哈希表,则使用为此目的设计的哈希算法.如果这就是它的全部内容,则哈希不需要也不应该是加密的.快速更重要.
CRC是编码理论的一个结果,它提供了用于错误检测和纠正的算法.CRC的目的是错误检测.
目前尚不清楚你在这里指的是什么平等.在任何情况下,CRC的要点是检查完整性.它在流中提供冗余信息,几乎可以检测传输中该流的任何意外损坏.