
nodejs 里用 crypto.randomBytes 生成一个 32 字节的随机数够不够。。
以及密码 hash 就直接用 hamc(password, salt) 么 = = 啥算法比较好.。。sha256 够么= =
1 thetast 2017-12-28 02:20:53 +08:00 via Android 楼下超市买 |
2 kmdgeek 2017-12-28 02:54:19 +08:00 重结晶?(捂脸逃 |
3 bao3 2017-12-28 02:55:36 +08:00 via iPhone 跑步后不要洗澡,大约 5 分钟得到盐 |
4 moult 2017-12-28 03:34:38 +08:00 via iPhone 盐么,没必要想那么复杂,随机来个 32 位的字符串差不多了。 密码加密么,Symfony 做法是将密码和盐拼凑一起进行 SHA,然后将 SHA 的结果和密码和盐拼凑一起进行 SHA,就这样来个 5000 次。。。 |
5 dangyuluo 2017-12-28 04:25:28 +08:00 salt 有必要这么长么?看了一些系统的代码,4 位 8 位居多 |
6 yangqi 2017-12-28 05:05:27 +08:00 加盐并不能提高安全性 |
7 cnnblike 2017-12-28 06:26:31 +08:00 可以去 random.org 上生成的但问题不在盐上,盐只是整个系统的一环,被攻破的时候最后出问题的往往不是盐而是一些愚蠢的设计。 |
8 flowfire OP |
9 Torpedo 2017-12-28 07:59:22 +08:00 via Android bcrypt 啊 |
10 mozutaba 2017-12-28 08:35:21 +08:00 via Android 尿完不冲,自动结晶 |
11 phx13ye 2017-12-28 08:38:17 +08:00 建议 argon2, argon2.generateSalt().then(salt => { argon2.hash('some-user-password', salt).then(hash => { console.log('Successfully created Argon2 hash:', hash); // TODO: store the hash in the user database }); }); |
12 justfindu 2017-12-28 08:41:05 +08:00 6-12 位 random 生成字母数字标点. 然而现在一般用 bcrypt |
13 xomix 2017-12-28 09:02:44 +08:00 首先肯定要加个时间戳,然后你可以密码加用户名然后 md5 做盐,你还可以密码 md5 前 16 位加用户名 md5 后 16 位假装自己是 32 位 md5,加盐后验证奇数或偶数位的 md5 假装自己是动态 md516 位加密。(客户端随机传奇偶位,服务器端两种验证都做,有一种通过即可) 让想逆推的人慢慢猜。 |
14 yilai 参考 django |
15 dilu 2017-12-28 09:16:24 +08:00 加盐不如 bcrypt 虽然速度下来了 但是安全性能上去了 |
16 me1ody 2017-12-28 09:18:10 +08:00 如果密码简单在复杂的 salt 也是一样的,所以 salt 4-6 位即可 |
17 Cat73 2017-12-28 09:19:30 +08:00 @moult 我们项目还真差不多就这样的,用户的 ID 加随机 8 个字符当盐,盐+密码来一次 hash,然后 hash+密码继续 hash 上 pow(2, 8 + 3) 次,最后的密码是 3(hash 次数) + 盐(不含用户 ID 的部分) + hash |
18 mcfog 2017-12-28 09:22:00 +08:00 via Android 配置的 secret/固定盐的话 openssl 命令生产,密码的话,不用自己手动生成盐,用类似 http://php.net/password_hash 的专用类库做这件事情,一个字段包含算法、盐、哈希,而且很容易支持 rehash,指定 cost 之类的 |
19 clino 2017-12-28 09:25:56 +08:00 |
20 whx20202 2017-12-28 09:29:26 +08:00 来来来看这个 http://blog.jobbole.com/61872/ 如果不懂建议无脑 bcrypt |
21 shuizhengqi 2017-12-28 09:43:39 +08:00 div class="reply_content">我都是去超市买 |
22 ksupertu 2017-12-28 10:01:47 +08:00 via iPhone bcrypt 啊,知乎都用的这个加 python:doge |
23 icaca 2017-12-28 10:04:08 +08:00 东搜竹盐 |
24 shihty5 2017-12-28 10:08:45 +08:00 抖机灵的都好无聊,第一个还算有点创意,后面的- - |
25 sea516 2017-12-28 10:09:51 +08:00 去盐城 |
26 Reign 2017-12-28 10:55:15 +08:00 random |
27 realpg PRO 火碱兑醋精 |
28 f2f2f 2017-12-28 11:24:02 +08:00 $md5($md5($random+$timestamp)+$random) 别告诉我你觉得这还不够 |
30 Doodlister 2017-12-28 12:17:10 +08:00 via Android shiro。 |
31 geelaw 2017-12-28 12:45:32 +08:00 看了上面一些回复,很有“保存 100 遍确保保存成功”的代码的感觉。 |
32 zythum 2017-12-28 13:05:27 +08:00 一般用 pm 的名字当盐 |
33 hcnhcn012 2017-12-28 13:56:40 +08:00 via iPhone 2Na + Cl2 === 2NaCl |
34 Livid MOD PRO 上面发布无意义跑题回复的账号已经全部被 Deactivate。 |
35 raofeng 2017-12-28 14:55:37 +08:00 我们也用的 bcrypt |
36 we000 2017-12-28 15:31:29 +08:00 @Livid 这样的操作应该越少越好, 威权用得越多大家越反感. 我个人对你管理社区的不满全来自于此, 当然你的地盘你说了算, 我也还是喜欢换小号过来晃. 这个帖子我觉得一部分原因是因为标题, 如果标题写好"算哈希的时候怎么生成盐", 估计没人会抖机灵. |
某些人以为多次 hash 能增强安全性,笑死人了。 |
39 wyyqyl 2017-12-28 16:16:04 +08:00 看标题以为大家用的盐都是自己生成的 不是超市买来的.... |
40 SingeeKing PRO @suspended 哎难道不是吗。。 |
41 ThatIsFine 2017-12-28 18:00:15 +08:00 @SingeeKing 就是一定长度的字符串而已, 它自己再怎么算也没多大作用. 创建一般是输入一个口令, 经过加密算法, 再搞一个随机串(盐)合并, 最后再加密, 盐和最后的串存数据库, 每次鉴权会再使用盐和输入算最后的串. 通过彩虹表撞库, 一般是已知算法, 生成数据字典, 去直接撞最后的串. |
42 ligo 2017-12-28 18:06:48 +08:00 via Android 酸碱中和 |
43 ligo 2017-12-28 18:12:36 +08:00 via Android 怎样删除回复??盐只要无法预测就可以了 |
44 ligo 2017-12-28 18:26:46 +08:00 via Android 我又想了一下,盐可以预测也无所谓,只要每个用户的盐值不同就行 |
45 geelaw 2017-12-28 18:32:44 +08:00 via iPhone @SingeeKing @ThatIsFine @flowfire @suspended 多次 hash 唯一可能增加安全性的可能是让 hash 计算变慢,然而这个和盐没什么关系。而且区区那么几次也没太大作用,我也不太懂为什么他们要,比如,hash 5000 次之类的。 |
47 geelaw 2017-12-28 18:49:47 +08:00 via iPhone @suspended 没明白,攻击者拖库之后想要算出一个可以通过系统验证的密码是需要自己算了 hash 的。没有明白这怎么减少了攻击者的计算量。 注意语境:加盐是为了防止拖库之后攻击者能用彩虹表或者频率统计的方法获取密码,这里的手法都是为了阻碍拖库之后得到密码的。 |
48 l1093178 2017-12-28 18:51:18 +08:00 每个用户盐不一样,而且盐足够长就行了,对随机性没什么要求... 以及记得选个慢 hash 函数(比如 argon2,scrypt 或者 bcrypt,安全性依序降低),md5 和 SHA 系列 hash 函数都不安全(用 GPU / 专用硬件破解起来很快) @suspended 然而多次 hash 确实能提高破解的成本,当然新的密码 hash 函数都直接把 cost 设置为 hash 函数的一个参数了。 |
50 msg7086 2017-12-28 19:23:01 +08:00 |
51 geelaw 2017-12-28 19:51:44 +08:00 |
52 msg7086 2017-12-28 19:57:40 +08:00 |
54 geelaw 2017-12-28 20:09:01 +08:00 @msg7086 #52 我 #31:不需要多次 hash suspended #37:多次 hash 不能增强安全性(同意我) 我 #45:(回复 #37 )多次 hash **有时**可以通过增加计算 hash 的难度增加安全性,但是这种方法和“盐”的主题没关系 suspended #46:(我认为是回复 #45 )多次 hash 会降低安全性 我 #47:(回复 #46 )没明白 #46 您 #50:(不知道回复哪一层) 我在 #31 表示不需要多次 hash 是说就盐这个机制,而且使用专门设计的慢 hash 更好;此外,我觉得是“保存 100 次”的另一个原因是,我没看出来他们这样做是为了减慢速度,那些发言给我的感觉是单纯觉得多加几次 hash 更难。 完整来说,我的观点: - 增加(固定次数的) hash 次数等价于改变 hash 函数,并不会让破解更困难(除了可能会让 hash 计算更慢这方面) - 加盐是为了让每个用户用不同的 hash 函数,从而无效化彩虹表和频率统计 |
55 msg7086 2017-12-28 20:12:55 +08:00 |
57 msg7086 2017-12-28 20:27:41 +08:00 @geelaw suspended 1 小时 40 分钟前 并没有。 [将专业的加盐 Hash 替换为多次反复计算 Hash,]实际上是增加了自己系统的计算量,减少了攻击者的计算量,降低了系统安全性的。 |
58 sgissb1 2017-12-28 20:27:57 +08:00 超市或者小卖铺买一包,接着倒出来,就生成盐了。这是最安全的。 科学宅的做法,一般是买一瓶氢氧化钠,接着买点盐酸,按照一摩尔氢氧化钠和一摩尔盐酸的比例用滴注法一点点的混合,在混合过程中需要用烧瓶作为容器,且需要注意温度变化,带滴注完成后,用玻璃棒轻微的搅拌调匀,即可得到 生成 的氯化钠,也就是我们百姓口中说的不加典食盐的主要成分。 |
60 kmahyyg 2017-12-28 21:03:44 +08:00 via Android python3.6 secrets.token_urlsafe(16) |
61 youyoulemon 2017-12-28 21:17:55 +08:00 @sgissb1 呆子才会用昂贵的氢氧化钠、盐酸反应#滑稽 |
62 ligo 2017-12-28 21:23:22 +08:00 via Android |
63 sgissb1 2017-12-29 10:06:31 +08:00 @youyoulemon 我觉得氢氧化钠不贵啊,莫非我记错了? |
64 sgissb1 2017-12-29 10:06:54 +08:00 @youyoulemon 打错字了,我不是觉得,我是记得! |
65 alexlee0728 2018-01-02 15:55:09 +08:00 |