最開始接觸web
開發時,對於使用者表的密碼基本是明文儲存,如:
username | password
---------|----------
zp1996 |123456
zpy |123456789
這種方式可以說很不安全,一旦資料庫洩漏,那麼所以得使用者資訊就會被洩漏。之前,國內普遍採用這種方式,造成了很多的事故,如csdn
600萬使用者資訊洩漏、12306
使用者資訊洩漏等。
本人大學做過的所有的專案基本採用的都是這種方式來儲存使用者密碼,就是對密碼進行md5
加密,在php
中md5
即可,在node
中利用crypto
模組就好:
const encrypt = (text) => ;
作為初學者的我,認為這種方式是很安全的,因為md5
不可逆(指攻擊者不能從雜湊值h(x)中逆推出x)而且碰撞機率低(指攻擊值不能找到兩個值x、x』具有相同的雜湊值);然而這種方式也是不安全的,只要列舉出所有的常用密碼,做成乙個索引表,就可以推出來原始密碼,這張索引表也被叫做「彩虹表」(之前csdn
600萬使用者明文密碼就是乙個很好的素材)。
這種方式是在實習中學習到的,也就是對密碼來進行加鹽。
在密碼學中,是指通過在密碼任意固定位置插入特定的字串,讓雜湊後的結果和使用原始密碼的雜湊結果不相符,這種過程稱之為「加鹽」。加鹽很好理解,就是給原始密碼加上特定的字串,這樣給攻擊者增加攻擊的成本,加鹽的關鍵在於如何選擇鹽:
採用固定的字串作為鹽,如下面這樣:
const
encrypt = (text) => ;
這種加鹽方式與多進行幾次md5
一樣的,沒有任何意義,攻擊者都可以拿到資料庫,難道拿不到源**嗎,根據源**攻擊者很輕鬆的就可以構造新的彩虹表出來逆推密碼。
鹽一般要求是固定長度的隨機字串,且每個使用者的鹽不同,比如10位,資料庫可以這樣儲存:
username
|password
|salt--
----
---|
----
----
-—--
----
----
----
----
----
--|-
----
----
-zp1996
|2636fd8789595482abf3423833901f6e
|63urcwjhth
zpy|659ec972c3ed72d04fac7a2147b5827b
|84gljvnhdt
採用的加密方式為:
md5(md5(password) + salt)
將其轉化為node
**:
/*
* 10位鹽
* 時間戳(2)+隨機字母(8)
*/const
salt = () =>
return time + str;
};const
md5 = (text) => ;
const
encrypt = (password) => ;
使用者密碼加鹽
2012.2.25 參加了tup第20期 網際網路安全 洩密門事件給網際網路安全敲響警鐘,使得原來的使用者資訊加密方式受到很大威脅。原來的加密方式是相同的明文經過md5雜湊加密後的密文相同,當某站點受到拖庫攻擊後,黑客統計出使用頻率最高的前n個密文 這個比例可以達到很高 反向推算出明文,那麼這些使用...
密碼加鹽處理
salting password 對密碼進行一些混淆增加破解的難度 一般對密碼都不會是明文儲存,而是對密碼進行md5處理,增強反向解密難度。但這樣還是能可以找出破綻。如果使用者可以檢視資料庫,那麼他可以觀察到自己的密碼和別人的密碼加密後的結果都是一樣,那麼,就會知道別人用的和自己就是同乙個密碼。對於...
什麼是加鹽密碼?
生活中,我們為了保證密碼的安全性,一般都不會使用明文儲存,而是要將明文進行加密,然後再進行儲存。假如我們的資料被拖庫,被洩露,請求被劫持的情況下,也能保證使用者的密碼不被洩露,確保賬號的安全性。md5資訊摘要演算法 英語 md5 message digest algorithm 一種被廣泛使用的密碼...