消息摘要的疑惑

发布于 2022-09-11 17:30:10 字数 638 浏览 48 评论 0

最近在学习 web 开发的时候遇到了一点问题, 有关摘要算法的, 个人查了资料还是不理解, 如下:

百度百科有这样一条:

一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。这正是好的消息摘要算法所具有的性质:输入改变了,输出也就改变了;两条相似的消息的摘要确不相近,甚至会大相径庭

我所疑惑的是既然是相同的输入对应相同的输出, 那么岂不是一个密码就对应一个根据算法产生的密文, 比如我这样:

import hashlib
pwd = 'abc'.encode('ascii')
s = hashlib.sha1(pwd)
s.hexdigest()

s # -> 'a9993e364706816aba3e25717850c26c9cd0d89d'

那如果一个坏人知道了是sha1算法和最后的s密文, 岂不是就可以反向推理出来密码是abc? 比如说很多人的密码可能就是简单的生日(类似 900101 这种), 那么推测 + 试验 + 比对不就可以推测出那个人的密码了么?

第一次接触这类知识, 理解还有很大的偏差, 望各位前辈解答指教!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

柠北森屋 2022-09-18 17:30:10

hash算法不是加密算法没有密钥,一般也无法反推。

简单的举例,如果告诉你:

def hash(s):
    return s[-1]

及hash值 'a',你无法算出原始的s是什么,所以没法反向推理。

但是是不是就不会被破解呢,不一定。
这里你立马就能想到s只要是任意以a为结尾的字符串都可以算出一样的hash值。
即使你不知道算法也能蒙几次就蒙到一样的,这是因为这个算法是如此的简单。
一般的hash算法比这复杂多了,一般在有限的时间里无法得到一个有效的结果,
以前定的一些标准随着计算机算力的提高,也可以被碰撞到有效结果,其他的还有量子计算机的应用。

柠檬心 2022-09-18 17:30:10

第一,哈希算法不是加密算法,它没有逆向的说法。
第二,哈希的作用是将任意输入映射到一个固定长度的结果上,也就是说,

abcas...(省略 2000 个字符),根据某个哈希算法生成的结果是 123456789
abc,根据同样的哈希算法生成的结果同样是 123456789

这是非常有可能发生的,因此凭借 123456789 和所使用的哈希算法,你连原文的长度都没法确定,更别说确定原文的内容了。

葮薆情 2022-09-18 17:30:10

@krun 非常清楚地解释了哈希算法的常识, 到今天为止, 还有同学把 MD5, SHA1 叫 "加密" 算法.

我这里补充一些使用上的资讯吧.

早期很多网站的密码用 MD5 存储在数据库, 外人通过渗透手段(比如 SQL 注入攻击)拿到数据库, 但是没有密码明文.
这时候网上出现了 MD5 搜索引擎, 例如

这类网站根据你提供的 MD5 摘要尝试找出原文.

得益于计算机运算能力的大幅提升, 加上后来的 rainbow 表

使得 MD5 摘要逆向运算越来越快. 甚至还出现了 FPGA 制作的硬件设备.
因此, 现在仅使用一次 MD5 运算来存储密码已经非常不安全了.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文