基於鹽+Sha演算法的安全密碼保護機制
密碼通過加鹽後,可以增加密碼的複雜度,即便最簡單的密碼,在加鹽後,也能變成複雜的字串,這大大提高了密碼破解的難度。但是如果將鹽硬編碼在程式中或隨機一次生成的,每個密碼進行hash使用相同的鹽會降低系統的防禦力,因為相同密碼的hash兩次後的結果也是一樣的。所以比較正確的做法是每次建立使用者或修改密碼都使用一個新的隨機鹽。
很多使用者可能想到了將使用者名稱作為鹽的方案,雖然對於每一個使用者來說使用者名稱可能是不同的,但是使用者名稱是可預測的,並不是完全隨機的。攻擊者完全可以用常見的使用者名稱作為鹽來製作查詢表和彩虹表破解hash。
我們通常使用密碼學上可靠安全的偽隨機數生成器(Cryptographically Secure Pseudo-Random Number Generator (CSPRNG))來生成鹽。正如它的名字說明的那樣,CSPRNG提供一個高標準的隨機數,是完全無法預測的。在Java中,可以使用java.security.SecureRandom生成。
此外,在web應用中,我們要在服務端進行Hash,而不是客戶端。因為如果Hash在客戶端的話,即便傳輸的不是明文,如果惡意的黑客獲取了使用者的Hash,就可以直接登入帳號了。甚至都不需要知道客戶的明文密碼,也就不需要破解Hash了。我們需要記得客戶端Hash並不是HTTPS的替代品。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/** * 獲取隨機鹽
* @return
*/
public static String getSalt(){
SecureRandom sr;
byte [] salt = new byte [ 16 ];
try {
sr = SecureRandom.getInstance( "SHA1PRNG" , "SUN" );
sr.nextBytes(salt);
} catch (Exception e) {
e.printStackTrace();
}
return salt.toString();
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/** * sha2 加鹽加密
* @param encryptStr 需要加密的字串
* @param salt 鹽
* @return
*/
public static String sha2EncryptSalt(String encryptStr, String salt){
MessageDigest md = null ;
String encryptCode = null ;
byte [] bt = (encryptStr + salt).getBytes();
try {
md = MessageDigest.getInstance( "SHA-256" );
md.update(bt);
encryptCode = bytes2Hex(md.digest());
} catch (NoSuchAlgorithmException e) {
return null ;
}
return encryptCode;
}
|
本文轉自 genuinecx 51CTO部落格,原文連結:http://blog.51cto.com/favccxx/1738655,如需轉載請自行聯絡原作者
相關文章
- 演算法~PBKDF2-SHA讓密碼更安全演算法密碼
- Windows安全保護機制下對埠的操作Windows
- 如何刪除word文件密碼保護 解除word文件保護密碼密碼
- 保護模式:段機制模式
- labview密碼保護方式及如何保護labview密碼不被破解View密碼
- Linux中的保護機制Linux
- 淺談資料庫系統安全保護機制資料庫
- word怎麼取消開啟文件的保護密碼 word文件刪除密碼保護密碼
- 技術淺析:前端沙箱資料安全保護的機制前端
- win10 excel有密碼保護怎麼強制開啟_win10 excel有密碼保護如何解除Win10Excel密碼
- BayMaxProtector-集崩潰保護與頁面降級於一體的大白保護機制
- 沙盒原始碼防洩密的安全機制原始碼
- 密碼學系列之:NIST和SHA演算法密碼學演算法
- 公安部正制定網路安全保護條例大資料保護機制將完善大資料
- .NetCore 登入(密碼鹽+隨機數)NetCore密碼隨機
- 如何破解Word文件密碼保護密碼
- EXCEL工作表保護密碼破解Excel密碼
- 智取螢幕保護密碼(轉)密碼
- 線上去除PDF密碼保護密碼
- SpringCloud Eureka自我保護機制SpringGCCloud
- 6個使用KeePassX保護密碼的技巧密碼
- 我國啟動新型資料保護密碼演算法研究密碼演算法
- 安全機密管理:Asp.Net Core中的本地敏感資料保護技巧ASP.NET
- 基於Linux的網路安全策略和保護措施(轉)Linux
- Word文件密碼保護怎麼解除?密碼
- 《springcloud 四》服務保護機制SpringGCCloud
- 【Gator Cloud】架構篇 - 提供基於雲原生的資料安全保護Cloud架構
- 關於pl/sql的程式碼保護SQL
- Gawker攻擊事件暴露密碼保護缺陷事件密碼
- 保護主機安全,我來buff加成
- WPS文字中的表格也保護密碼功能密碼
- 從QQ登入方式想到的QQ密碼保護密碼
- 用Java的加密機制來保護你的資料Java加密
- 程式碼伺服器安全保護(二)伺服器
- 600萬密碼洩露之後,我們該如何保護自己的密碼?密碼
- Uber如何安全保護Kafka基礎設施?Kafka
- 為什麼要在密碼里加點“鹽”密碼
- 保護企業系統中的程式碼安全