使用者註冊登入密碼儲存傳輸方案

2022-06-21 08:36:08 字數 1421 閱讀 7831

md5加密屬於不可逆的,同一字元,加密後的16進製制數是不變的。自從出現彩虹表,對於公司內部員工來說,可以反查資料,獲取不可能的許可權,所以出現了salt演算法。

一般採用:md5註冊登入雙重加鹽密碼保護。

1、為了防止底層人員和外部入侵能檢視到資料庫的使用者密碼,需要對密碼加鹽處理,使得使用者的密碼洩露時不能通過彩虹表等手段容易破解得到明文。

2、在使用者登入時,傳輸密碼再次加鹽,使得使用者入侵者就是拿到前端已經加鹽的雜湊值也不能與後台資料庫的雜湊值相對應。

//

num:使用者賬號 pass:使用者密碼明文(其中num認為是鹽slot)

let pwd = md5(num+md5(pass));

登入時密碼流程:

1、密碼先以註冊時的形式(賬號為鹽)加鹽,得到的結果就是與資料庫一樣的加密值。

2、將以上的加密值再加入時間戳為引數(秒/10),加密以上的加密值,傳輸到後台。

3、php重複第二步驟,將該使用者的資料庫密碼值以第二步加密,然後比較前台請求的加密資料是否與後台的相等。

//

js前端登入密碼加密:

var timestamp =parseint(date.parse(new date())/10000);

let pw = md5(num+md5(pass));

let pwd = md5(pw+timestamp);

//php後台密碼處理:

$time = intval(time()/10);

$pw =$userinfo['u_pwd'].$time;

$pwd = md5($pw);

為了防止網路延遲導致time不一致(加鹽不一致),timestamp作為呼叫引數傳遞到後台。

ps:資料庫中儲存的是明文密碼的md5加鹽賬號後md5值,即md5(num+md5(pass))。

一般使用的加鹽:md5(password+username),即將使用者名稱和密碼字串相加再md5,這樣的md5摘要基本上不可反查。

但有時候使用者名稱可能會發生變化,發生變化後密碼即不可用了(驗證密碼實際上就是再次計算摘要的過程)。

設計乙個非常簡單的加鹽演算法:每次儲存密碼到資料庫時,都生成乙個隨機16位數字,將這16位數字和密碼相加再求md5摘要,然後在摘要中再將這16位數字按規則摻入形成乙個48位的字串。在驗證密碼時再從48位字串中按規則提取16位數字,和使用者輸入的密碼相加再md5。按照這種方法形成的結果肯定是不可直接反查的,且同乙個密碼每次儲存時形成的摘要也都是不同的。

ps:資料庫中儲存的可以為明文密碼的md5值,註冊時直接上報後台密碼的md5值可行(只有註冊時一次)。

參考:1. md5註冊登入雙重加鹽密碼保護

2. md5加密+加鹽

3. 訊息摘要演算法hmac

登入註冊系統,前端密碼安全解決方案

解決密碼安全問題,通常是需要一套解決方案的。而不是某幾個加密方法。1 採用https加持 2 後端不需要解密前端傳過來的密碼,這種情況下用md5加密 3 後端需要解密前端傳過來的密碼,可以用aes 令牌 密碼 前端登入流程 呼叫介面獲取令牌,令牌放入redis 字首 sessionid作為快取key...

如何加密傳輸和儲存使用者密碼

近期,github被爆出,在內部日誌中記錄了明文密碼。雖然據說影響面很小,但是網路和資料安全問題又一次被放到臺面上。大多數使用者的常用密碼就那麼幾個,一旦被黑客拿到,去其他 撞庫 可能會造成使用者的財產損失。加密主要有兩種方式 對稱加密和非對稱加密。對稱加密 在加密和解密時使用的是同乙個秘鑰。對稱加...

登入方案 使用者單點登入

在微服務專案中,由於使用者往往需要通過閘道器訪問多個微服務,如登入需要訪問使用者微服務,商品瀏覽需要訪問商品微服務,下單需要訪問訂單微服務,支付需要訪問支付微服務。但如何防止使用者操作其他使用者的資料,這就需要在各個微服務中增加授權認證。每個服務都要認證使用者的身份,身份認證成功後,需要識別使用者的...