保存密码时需要加盐 Hash 之后保存密文,那么,如果每个密码使用的“盐”不同的话,“盐”怎么保存?

2019-12-17 15:38:21 +08:00
 cloudfstrife
8497 次点击
所在节点    信息安全
44 条回复
scukmh
2019-12-17 15:41:32 +08:00
$yourSalt$passwordHash$
shengchen11
2019-12-17 15:43:29 +08:00
有些 salt 就是 username 吧
CloudMx
2019-12-17 15:43:45 +08:00
Bcrypt,可以看看。
Telegram
2019-12-17 15:45:55 +08:00
对应的盐也存入数据库呗。
wevsty
2019-12-17 15:50:38 +08:00
salt 可以明文储存在数据库。

Hash 加盐这种做法要保障安全的话,除了 Hash 算法的选择以外也需要盐足够长,一般认为盐的长度应该和密码长度一样长才行。

另外目前是更推荐直接用 BCrypt。
atom234
2019-12-17 15:51:10 +08:00
用现有字符串字段,如果盐不香,可以放点味精、料酒、蚝油之类的
yisheyuanzhang
2019-12-17 16:00:01 +08:00
推荐 Bcrypt
cyannnna
2019-12-17 16:02:05 +08:00
Bcrypt +10086
a7217107
2019-12-17 16:03:08 +08:00
bcrypt 不用手动存盐
php01
2019-12-17 16:09:03 +08:00
4 年前流行这做法,现在还用这做法的,可能大部分都是很久没看过新东西的老油条了吧
qdwang
2019-12-17 16:13:10 +08:00
存在隔壁
miniliuke
2019-12-17 16:33:47 +08:00
@php01 现在都流行咋搞
hwdef
2019-12-17 16:40:22 +08:00
aes(md5(key))
RyougiShiki
2019-12-17 16:57:54 +08:00
django 自带的 admin 注册个用户到数据库表看一下就明白了,同 1 楼回答。
jorneyr
2019-12-17 17:01:37 +08:00
Bcrypt 的弊端就是效率太低,当大批量从文件导入创建用户,且每个用户的密码还不一样时,非常非常慢
0TSH60F7J2rVkg8t
2019-12-17 17:06:41 +08:00
@jorneyr 这个效率是故意设置的,防止被脱裤后直接拿来跑字典和彩虹表
ech0x
2019-12-17 17:15:06 +08:00
ech0x
2019-12-17 17:18:41 +08:00
salthash1 = Bcrypt(password + salt1)
salthash2 = sha512(salthash1 + salt2)
其中 salthash1 不能保存在数据库里
yisheyuanzhang
2019-12-17 17:21:40 +08:00
@jorneyr Bcrypt 有个参数影响加密效率( GENSALT_DEFAULT_LOG2_ROUNDS = 10 ),为了防止暴力破解
xuanbg
2019-12-17 17:56:10 +08:00
如果每个数据的盐都不同的话,就加一个字段存起来呀。最简单的是用现成的账号 hash 后做盐,这样就不需要额外字段存了。

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

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

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

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

© 2021 V2EX