关于 md5 密码加密的一点小疑问

2016-08-22 14:43:50 +08:00
 binbinyouliiii

    现在很多公司都用 md5 加密来加密密码,我们公司也是用的这个方式(不是我写的),众所周知, md5 是不可逆的,所以存在数据库的密码是加密的,如果用户从前台传来密码,按照我现在所知的应该只能从传来的密码再加密后和数据库进行比较。
    前几天又看到有一个叫彩虹表的东西,觉得跟字典差不多,那这样岂不是很不安全,既然 md5 不可逆,那为什么公司都不自己随便创个加密方式,非要用 md5 ,有了彩虹表这个东西, md5 又比普通的加密安全吗?


刚实习的新手,有小白的地方轻喷😃

12173 次点击
所在节点    Java
105 条回复
Halry
2016-08-22 18:30:35 +08:00
@wy315700 我的意思是 md5 是 hash 算法,根本没有加密功能,因为是不可逆转的.
youxiachai
2016-08-22 18:30:43 +08:00
@Halry 加密举个 aes 吧...sha 也是散列算法..
Halry
2016-08-22 18:31:36 +08:00
@youxiachai 看上一楼,表达错误,sorry
wy315700
2016-08-22 18:35:47 +08:00
@youxiachai
@Halry
但是 SHA 算法其实是一个固定密钥的块加密算法
morethansean
2016-08-22 18:36:24 +08:00
@Halry sha1 可逆?
scnace
2016-08-22 18:37:27 +08:00
md5 来做 Bloom filter 的散列函数不错🙈🙈🙈 (还记得当年实验室开周技术分享的时候 因为说了 md5 是加密算法 被学长嘲笑的无地自容)
lance6716
2016-08-22 18:46:20 +08:00
@youxiachai 学通信的,好多门课都会讲加密和消息摘要
fyibmsd
2016-08-22 18:49:30 +08:00
这叫非对称加密
wy315700
2016-08-22 18:52:41 +08:00
@fyibmsd 第一次听说非对称加密这么解释的
raincious
2016-08-22 18:53:24 +08:00
@Halry

其实并不是说 Hash 不能用来做密码“加密”,只是说很多 Hash 算法太快了。密码的 Hash 算法需要能控制 Hash 计算的速度,原字符串输入进去之后,必须使用大于 N 的时间才能算出对应的 Hash ,这样才可以保证密码在 N 年内不太可能被破解出来。

直接用 MD5 、 SHA1 的问题是,如果 Hash 拿到手,几分钟撞出一个,对于关键人物(比如各种 SSL 证书)来说跟没 Hash 过的完全没有区别。
f2501093
2016-08-22 19:05:48 +08:00
TL; DR 直接用 bcrypt (如果你担心基于 ASIC 或者 FPGA 的硬件密码破解,用 scrypt )
binbinyouliiii
2016-08-22 19:08:23 +08:00
@lance6716 额,我学 java 的,老师从来没提起过 md5 啥的,难道别的老师都教这个嘛
paw
2016-08-22 19:19:34 +08:00
http://webcache.googleusercontent.com/search?q=cache:ezsTSZ3IZUEJ:blog.jobbole.com/87058/+&cd=1&hl=zh-CN&ct=clnk (源站打不开 贴快照了)
http://coolshell.cn/articles/2078.html

用 bcrypt 、用 bcrypt 、用 bcrypt
别用 MD5 、 SHA1 、 SHA256 、 SHA512 、 SHA-3 等“加密”算法
hack
2016-08-22 19:30:45 +08:00
md5(md5(pwd)+$%^*&) ,欢迎来解
haozibi
2016-08-22 19:32:44 +08:00
还好我学过密码学,你可以百度一下,山大王小云
Wien
2016-08-22 19:34:32 +08:00
md5 、 sha1 这类算法都是单向哈希算法,不算加密。 bcrypt 是专门为密码存储而设计的算法。一般把密码 MD5 后的哈希值再用一次 bcrypt 加密,已经不可能被破解了。
binbinyouliiii
2016-08-22 19:39:22 +08:00
@haozibi 哈哈,我一开始看成山大王 小云 了 shan dai wang xiaoyun
damean
2016-08-22 19:41:46 +08:00
@binbinyouliiii
额,学校里不都是教计算机网络的时候顺带教一下 java 的吗? java 这么简单,还有单独的课程么?
我念书的时候,只有 C/C++有单独的课程。

我上学的时候密码学虽然是选修,但是属于预订的默认课程。
damean
2016-08-22 19:49:00 +08:00
@wy315700 虽然多了一个向量配置(固定密钥),但依然不是加密算法。本质上还是属于摘要算法。
@fyibmsd 非对称加密。。。你脑洞太大了吧。。。公私钥分别是啥?
iyaozhen
2016-08-22 19:52:07 +08:00
@jimzhong 真的可以破解。 md5 , sha1 什么的都是 hash(摘要)算法,是不可逆的,不是加密。

有了彩虹表是不安全,所以密码不要设置为'123456'这种简单的密码。但程序上可以加盐,比如 md5(md5('123456') + 'abc')。当然盐也不能很简单。设置可以每个用户不同的盐。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/300946

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX