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

X 经,关于用户验证

  •  
  •   un · 2014-05-08 11:18:52 +08:00 · 2851 次点击
    这是一个创建于 3851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如果服务器端用了 bcrypt 保存密码,客户端登录要怎么做?没有 SSL 证书的情况。
    6 条回复    2014-05-08 16:33:51 +08:00
    SkyFvcker
        1
    SkyFvcker  
       2014-05-08 13:00:06 +08:00
    没有SSL比较好的方法是,服务器生成随机数r发给客户端,客户端计算hash(r+bcrypt(密码)+时间),然后服务器再验证hash(r+服务端保存的值+时间)是否等于发来的值。
    rankjie
        2
    rankjie  
       2014-05-08 13:07:50 +08:00 via iPhone
    @SkyFvcker
    好复杂的方法,似乎可用于客户端hash算法不会被恶意替换的情况(例如CS架构)。但如果是BS架构,hash算法应该就是js写的,没有ssl的情况什么都能给你替换了,hash返回明文,再截取了照样白瞎…
    rankjie
        3
    rankjie  
       2014-05-08 13:11:46 +08:00
    @SkyFvcker 再想了下,这个 bcrypt(密码) 生成的 hash 每次都是不同的吧? 如果把这个 hash 当作明文再 hash 一次,最终的 hash 怎么可能能匹配上啊...?
    oott123
        4
    oott123  
       2014-05-08 13:40:01 +08:00 via Android
    上个 ssl 吧…
    不然就只有明文了,浏览器和数据库总有一个不能加盐,除非你愿意共享盐…
    un
        5
    un  
    OP
       2014-05-08 14:28:06 +08:00
    客户端是浏览器。浏览器端js hash掉,被抓包的话确实 hash 的意义都没了。真想安全看来只能 SSL 了。
    9hills
        6
    9hills  
       2014-05-08 16:33:51 +08:00
    @rankjie 没有SSL你考虑什么安全性。。能用就行啦,什么都会被破

    bcrypt(密码) 生成的 hash 每次当然是一样的,要不怎么能验证呢。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5151 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:27 · PVG 17:27 · LAX 01:27 · JFK 04:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.