我們數(shù)據(jù)庫的權(quán)限管理十分嚴(yán)格,敏感信息開發(fā)工程師都看不到,密碼明文存儲不行嗎?

不行。存儲在數(shù)據(jù)庫的數(shù)據(jù)面臨很多威脅,有應(yīng)用程序?qū)用妗?shù)據(jù)庫層面的、操作系統(tǒng)層面的、機房層面的、員工層面的,想做到百分百不被黑客竊取,非常困難。

如果密碼是加密之后再存儲,那么即便被拖庫,黑客也難以獲取用戶的明文密碼??梢哉f,密碼加密存儲是用戶賬戶系統(tǒng)的底褲,它的重要性,相當(dāng)于你獨自出遠門時縫在內(nèi)衣里錢,雖然你用到他們的概率不大,但關(guān)鍵時刻他們能救命。

那用加密算法比如AES,把密碼加密下再存,需要明文的時候我再解密。

不行。這涉及到怎么保存用來加密解密的密鑰,雖然密鑰一般跟用戶信息分開存儲,且業(yè)界也有一些成熟的、基于軟件或硬件的密鑰存儲方案。但跟用戶信息的保存一樣,想要密鑰百分百不泄露,不可能做到。用這種方式加密密碼,能夠降低黑客獲取明文密碼的概率。但密鑰一旦泄露,用戶的明文密碼也就泄露了,不是一個好方法。

另外,用戶賬戶系統(tǒng)不應(yīng)該保存用戶的明文密碼,在用戶忘記密碼的時候,提供重置密碼的功能而不是找回密碼。

保存所有密碼的HASH值,比如MD5。是不是就可以了?

不是所有的HASH算法都可以,準(zhǔn)確講應(yīng)該是Cryptographic Hash。Cryptographic Hash具有如下幾個特點:

  1. 給定任意大小任意類型的輸入,計算hash非???;
  2. 給定一個hash,沒有辦法計算得出該hash所對應(yīng)的輸入;
  3. 對輸入做很小改動,hash就會發(fā)生很大變化;
  4. 沒有辦法計算得到兩個hash相同的輸入;

雖然不是為加密密碼而設(shè)計,但其第2、3、4三個特性使得Cryptographic Hash非常適合用來加密用戶密碼。常見的Cryptographic Hash有MD5、SHA-1、SHA-2、SHA-3/Keccak、BLAKE2。

從1976年開始,業(yè)界開始使用Cryptographic Hash加密用戶密碼,最早見于Unix Crypt。但MD5、SHA-1已被破解,不適合再用來保存密碼。

那我保存用戶密碼的SHA256值。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式