Tip:
Highlight text to annotate it
X
有很多热门的哈希(Hash)算法,当然了,你也可以自己写
但你最好不要自己写
在 CS387 里第一节课就教你不要写自己的加密算法
至少本门课里不会这样做
当然,如果你建立你自己的哈希表,你可以想做什么做什么
但如果你准备用于安全目的,那么最好不要自己写
如果你想学习怎么创建一个哈希表..
当然,有些人可能做的更好,但谁知道的。
不论如何,某些热门的算法是CRC32
设计用于检查一些东西
比如如果你想给某人发送一些数据,比如一个大文件
你可能在文件里包含CRC校验码, 这是一种简单方法
用于验证你拿到了整个文件,并且它没有损坏
因为你发送哈希值比发送整个文件简单的多
你可以复制然后粘贴一个哈希值,它不会很长
你可以验证你收到的文件,和他们发的文件的CRC值是否相同。
然后你也不必一点一点验证你收到的是否是正确的文件
CRC非常快,它真的只是用于检查东西的目的
基本上,给大文件创建一个哈希
它的安全性能不是很好。
比较容易发生“碰撞”
意思就是说2个东西的哈希值是一样的。
但重点在于,拿到的哈希值几乎每次都是不同的
对于不同的数据
现在很明显的是,如果输入的大小基本大于输出的大小,
是的,就会发生碰撞
整个的一点是,它是很难找到他们,并与CRC32,它很容易找到他们
用CRC的原因是, 你不关心碰撞
你只关心速度,那么CRC是非常快的
目前最受欢迎的散列算法还是md5 (散列跟哈希是一个意思)
它和CRC32差不多快
人们认为它是相当安全的,但其实不是
在过去的几年里,MD5已经被打破了多次,这是很容易找到
MD5碰撞。
给定一个 x 哈希出 y, 非常容易用这个哈希值y
逆运算出原始的输入数据 x ,你会看到这是一个很大的问题
所以我们不会在课程里使用md5
那么它有它适用的使用情况,对吧?
如果你有一个有限的输入,那么会非常难找到碰撞
有一类攻击是用越来越长越来越长的x
那是一个找到md5碰撞的非常容易的方法
但如果你把数据长度限定在一定范围,那么你就不用过分关心这个漏洞。
因此,无论如何,只要记住这一点。
当你非常关心数据的时候,不要用md5
第二个受欢迎的哈希算法叫 sha1
这个没那么快,不过倒是挺安全的,直到最近人们才有方法
让 sha1 发生碰撞
它仍然是相当不错的。实际上,除了md5,它是第二受欢迎的算法。
但你应该有一些,像sha256的算法
你可能猜到它是更大版本的 sha1
实际上不是的,这个算法,我相信,被改变。
因此,让我们说这个人是安全上下,这是一个很不错的。
这个会花些时间
当然,得折中一些速度。
因此更好的哈希算法,现在越慢
为了安全值得了。
所以没有什么大的惊喜,在那里,有一个成本和安全性之间的逆相关性。
但这就是游戏的名称
这样根据您正在处理那些问题。
您可能需要实际作出的决定。
用于我们的目的
我们可能大部分会用sha256
让我给你展示如何用他们