V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fstar
V2EX  ›  编程

密码加盐哈希中,盐好像可以不存到数据库吗?

  •  1
     
  •   fstar · 2022-04-13 13:10:43 +08:00 · 2295 次点击
    这是一个创建于 957 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看有些文章说 salt 需要存到数据库。

    但有些加密库不需要,比如 bcryptjs 。

    https://github.com/dcodeIO/bcrypt.js#usage---sync

    用法为:

    To hash a password:

    var bcrypt = require('bcryptjs');
    var salt = bcrypt.genSaltSync(10);
    var hash = bcrypt.hashSync("B4c0/\/", salt);
    // Store hash in your password DB.
    

    To check a password:

    // Load hash from your password DB.
    bcrypt.compareSync("B4c0/\/", hash); // true
    bcrypt.compareSync("not_bacon", hash); // false
    

    Auto-gen a salt and hash:

    var hash = bcrypt.hashSync('bacon', 8);
    

    这是什么原理?

    我猜它是不是给明文密码又哈希了一次,作为 salt 。因为可以通过明文密码计算出 salt ,所有 salt 不需要入库。

    如果确实这是这样,大家认为这两种做饭各有什么优缺点?

    第 1 条附言  ·  2022-04-13 14:14:53 +08:00
    发现 bcryptjs 库其实是将 salt 和哈希后的密码拼到一起了。
    所以数据库中,password 字段同时保存着( 1 )随机生成的 salt 和( 2 )加盐哈希后的密码。也就是一个字段存了两个字段的信息,感觉是一个种挺巧妙的做法。
    8 条回复    2022-04-14 11:24:00 +08:00
    lostpg
        1
    lostpg  
       2022-04-13 13:18:03 +08:00 via Android
    把明文密码哈希作为盐和不存盐是两回事,不保留盐的话以后验证密码时盐靠猜的话,那算力怕不是很够用...
    rekulas
        2
    rekulas  
       2022-04-13 13:21:33 +08:00
    不清楚他具体算法,但如果是根据明文计算的话-那这种盐也只能防止彩虹表,定向爆破难度会降低,安全性更弱

    aes 的做法是盐随机生成放到密文里面,所以每次生成密文都可以不一样但又不需要单独保存盐-但是同上也只能防止彩虹表爆破防不了定向
    R18
        4
    R18  
       2022-04-13 13:33:42 +08:00
    他就是把 salt 放到加密好的密文里,每次解密的时候先从密文读取 salt 。这本质上还是存储了 salt 啊。
    jimages
        5
    jimages  
       2022-04-13 13:34:02 +08:00
    bcrypt 的 salt 存在密文里面的。当 check 的时候,会从密文中取出 salt 和 cost 参与计算。
    fstar
        6
    fstar  
    OP
       2022-04-13 13:38:58 +08:00
    @jimages 懂了,一个字段存两个字段的内容。
    lovelylain
        7
    lovelylain  
       2022-04-13 13:43:59 +08:00 via Android
    相同密码用 bcrypt hash 两次结果不一样,显然是把盐存在了结果里
    night98
        8
    night98  
       2022-04-14 11:24:00 +08:00
    bcrypt 是方便开发者,盐直接放到生成的结果里了,用这种密码加密算法主要是为了防止脱裤后人家暴力破解计算用户的密码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1068 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:41 · PVG 03:41 · LAX 11:41 · JFK 14:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.