ENCRYPT加密
ENCRYPT(str, salt);使用UNIX crypt()函數(shù),用關(guān)鍵詞salt加密字符串str
Salt可以是任意字母、數(shù)字、或是字母或數(shù)字的組合,但必須是隨機(jī)產(chǎn)生的,每個(gè)用戶的Salt 都不一樣,用戶注冊(cè)的時(shí)候,數(shù)據(jù)庫中存入的不是明文密碼,也不是簡單的對(duì)明文密碼進(jìn)行散列,而是MD5( 明文密碼 + Salt),也就是說:
1.MD5('123' + '1ck12b13k1jmjxrg1h0129h2lj') = '6c22ef52be70e11b6f3bcf0f672c96ce'
2.MD5('456' + '1h029kh2lj11jmjxrg13k1c12b') = '7128f587d88d6686974d6ef57c193628'
當(dāng)用戶登陸的時(shí)候,同樣用這種算法就行驗(yàn)證。
由于加了Salt,即便數(shù)據(jù)庫泄露了,但是由于密碼都是加了Salt 之后的散列,壞人們的數(shù)據(jù)字典已經(jīng)無法直接匹配,明文密碼被破解出來的概率也大大降低。
是不是加了Salt 之后就絕對(duì)安全了呢?當(dāng)然沒有!壞人們還是可以他們數(shù)據(jù)字典中的密碼,加上我們泄露數(shù)據(jù)庫中的Salt,然后散列,然后再匹配。但是由于我們的 Salt 是隨機(jī)產(chǎn)生的,假如我們的用戶數(shù)據(jù)表中有 30w 條數(shù)據(jù),數(shù)據(jù)字典中有 600w 條數(shù)據(jù),壞人們?nèi)绻胍耆采w的壞,他們加上Salt后再散列的數(shù)據(jù)字典數(shù)據(jù)量就應(yīng)該是3000006000000 = 1800000000000,一萬八千億啊,干壞事的成本太高了吧。但是如果只是想破解某個(gè)用戶的密碼的話,只需為這 600w 條數(shù)據(jù)加上 Salt,然后散列匹配??梢?Salt 雖然大大提高了安全系數(shù),*但也并非絕對(duì)安全。**
實(shí)際項(xiàng)目中,Salt 不一定要加在最前面或最后面,也可以插在中間嘛,也可以分開插入,也可以倒序,程序設(shè)計(jì)時(shí)可以靈活調(diào)整,都可以使破解的難度指數(shù)級(jí)增長。