关于用户密码使用盐加密后,盐的存储位置

如题,盐你们会存在数据库里面吗

  • 安全

    安全永远都不是一个小问题。

    146 引用 • 774 回帖 • 569 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    1586 引用 • 10391 回帖 • 574 关注
被采纳的回答
  • 233333

    不能光放盐,有时候需要一点味精huaji

16 回帖
请输入回帖内容...
  • mymoshou

    有写在代码里的,有存在文件里的,也可以加密后存到数据库.. 便利性和安全系数成反比,看自我选择

  • wizardforcel

    固定的 salt 值不保险,我习惯把用户名或者用户名的某个编码当做 salt 值。

    1 回复
  • CismonX

    常见的做法是每次随机生成 salt,然后将 salt 与密文一同入库(可以单独放一列,也可以 append 到加密后的密文之前,如果 salt 的长度确定的话)

  • yoss

    盐一定要用随机数。

    1 回复
  • wizardforcel

    你这就叫教条主义。只要每个用户的 salt 不一样就足以防止彩虹表了。

    1 回复
  • yoss

    按照某种固定规律编码容易构造出盐从而构造彩虹表,所以才会强调一定要用随机值,看看 Wiki 上怎么解释的。

    1 回复
  • wizardforcel

    salt 不是隐藏的东西,是直接写在用户表里面的,黑客根本不用猜规律,直接 dump 数据库就行了。

    彩虹表的构造过程就是对常见密码跑一遍 md5(pw),假设这个复杂度是 f(n),那么无论用用户名还是新的随机值都是 m * f(n)m 是数据库中用户的数量,这两种方法本质上没区别。

    至于猜规律更是无稽之谈。给你前五个用户名,你给我预测下一个用户的用户名?能预测出来?

    1 回复
    1 操作
    wizardforcel 在 2020-03-06 22:37:25 更新了该回帖
  • yoss

    至于猜规律更是无稽之谈。给你前五个用户名,你给我预测下一个用户的用户名?能预测出来?

    这是你自己说的猜,我可没说要通过猜。

    1. 开源项目源码是公开的
    2. 公司代码员工都可以看

    用得着猜?

    所以盐一定要用随机数不是教条主义,不要自以为是耍小聪明。

    2 回复
  • wizardforcel

    你对随机数太一知半解了。

    你拿线性同余算法生成出来的都是伪随机数。

    md5(用户名)可以看做真随机数。

    建议你好好研究一下标准库里的随机数都是怎么生成的,真随机数和伪随机数的区别,检验方法,然后再做做实验,别老跟这儿撕逼。

  • wizardforcel

    如果你觉得,标准库里面的随机数算法,也就是线性同余 + 当前时间戳是真随机数的话,NAIVE。

    由于当天时间是不确定的,并且这种算法的输出在概率分布上足够随机,所以它在特定情形下可以当随机数用。

    但又不表明一切随机数就得按照这个算法来,其他的办法多了去了,懂?

    1 回复
  • nomec

    前来涨知识

  • yoss

    随机数生成本来就是一个博大精深的问题,你想岔开话题随你的便。

    1 回复
  • Eddie

    我记得只有量子计算机才有真的随机数。。。。

    1 回复
  • CismonX 1

    x86 的 RDSEED 可以认为是一个 TRNG,近几年 Intel 和 AMD 的多数 CPU 都支持。见这篇文章

  • 233333

    不能光放盐,有时候需要一点味精huaji

请输入回帖内容 ...