昨天刚发完的文章,就有小伙伴私信,说我构建的那个哈希函数没满足5个条件。

“新文有个疑问,7位为何可以避免碰撞?如果只有四位,那最多只有10000(0000-9999)个号,乘以移动联通电信大概60个三位数,总共才个手机号码,是不够的,说明了中间四位并不唯一,也就是说即使前三后四一致哈希函数可以应用于,也不一定是一个手机号才对吧”

她的提问是道理的。我所构建的那个初级函数也确实是哈希函数,只是 这个函数经不起无法完全满足那5个特点。

也就是说,这个函数是不完满的,如果用做密码,是会被攻克的。她的问题之一,就是固定位数太少(长度不够),很容易被穷举法给破译---反向推出来。比如,你知道了电话号码的7位数,是有可能用穷举法把中间四位的号码按照所有的排列组合试一遍,最终一定能把13位电话号码给找出来。

那么就把哈希值的位数拉长,让人计算不出来。

当年为了解决这个问题,大概是1990年代,美国那边的密码专家和计算机专家,就开始构建“安全”的哈希函数,这里面最有名的是MD5和SHA1。

1. MD5:MD5是一种哈希算法,其输出长度为128位。MD5后来被广泛应用于密码学安全领域,例如数字签名、数据加密等。但是,随着计算机计算能力的加强,128位的的输出长度仍然不够看了,且存在一些其他的安全漏洞,现在已经不再被推荐使用。

哈希函数可以应用于_哈希函数主要用于_哈希函数应用主要有

2. SHA1也是一种哈希算法,其输出长度为160位。SHA1比MD5更安全哈希函数可以应用于,但也存在一些安全漏洞。美国国家安全局已经将SHA1归为不安全的算法之一。

上面两个哈希函数/算法 也不停的被攻击和挑战,方法就是第一篇所讲的5个特点里面找漏洞。目前这两个算法已经都被攻克了,不安全了。

魔高一尺,道高一丈,安全专家们继续构建新的哈希函数,于是又有了两个新的函数:和。

3. :是SHA算法族中最常用的一种,其输出长度为256位。比SHA1更安全,因此在许多应用程序中使用。它常用于数字证书的签名和验证、网络安全协议等。

4.:是SHA算法族中最安全的一种,其输出长度为512位。比更安全,但计算速度更慢。它常用于对于高需求安全性的应用程序,例如密码学、数字签名等。

虽然比更安全,但是计算量大,计算速度慢。不满足5大原则的第一条---正向计算简单。

不同的哈希算法在安全性和计算速度之间有不同的权衡。后来发明比特币的时候,使用的是256算法,也有这方面的考虑。

问题来了,随着计算机计算能力的进步,256会不会被发现漏洞?

最后,放一个网站,可以自己去试试上面MD5的哈希运算。

比特币学习笔记,

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注