假设网站上有大量的注册用户,因为某些情况需要改变用户密码的加盐算法,那么数据库里的用户信息该怎么更新?我想到的方法是:新增一个字段,新的加盐算法正式上线后,用户第一次成功登录时就把新的加盐后的值存到新字段,旧的值去掉。但是这样的话:用户每次登录都要判断是否已经更新其密码加盐值,在某种意义上来说会不会是不环保的?几百年不登录一次的用户需要怎么处理?P.S.加盐算法是不是一般都要有长远的考虑,不要经常改变?
2 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
加盐算法可以很简单的判断新增一个版本字段,用户登录时,判断版本,如果是老版算法,则使用老版验证,验证成功后再静默地更新到新版算法。如果是新版算法那么就直接用新版算法登录
慕莱坞森
TA贡献1810条经验 获得超4个赞
php的密碼加密函數的解決方案是把加密方法作爲加密結果的前綴,只要讀取這個前綴即可知道用何種算法。如以前沒有前綴,那麼找一個不會出現在以前版本結果里的字符串做前綴即可。至於更新,當然要把密集的運算稀釋掉,比如用用戶登錄做觸發。至於是否登錄成功,這其實意義不大。好比PHP的寫時複製,按需計算而不是按意義計算。這樣不登錄的用戶也不用考慮了。另外,持續判斷是何種加密算法並不是冗餘的,它應該算作加密算法的一部分。不停重複運行加密算法算不算冗餘呢?長遠的考慮不意味着阻止突發事件的處理。比如一向用md5加密,卻突然發現md5爆出重大漏洞(雖然可能性很低),這時候要不要立即更換?所謂的長遠,不僅要考慮到正常時期,還要考慮到突發事件。這也是爲什麼你遇到這個問題——一開始就沒設計好,沒做好長遠的考慮。
添加回答
举报
0/150
提交
取消
