我正在使用Java/JSP製作一個小型社交網站。我想要密碼加密,然後存儲在數據庫中。我想知道現在是否需要使用JavaScript(sha1,md5,..)加密密碼客戶端,然後將其發送到服務器,或者它足夠安全,可以忽略客戶端並僅在服務器端加密密碼。Java中的客戶端和服務器端密碼加密
2
A
回答
1
2
您需要通過TLS(SSL)在客戶端和服務器之間傳輸密碼。然後,使用成本因子爲16或更高的bcrypt
(或PBKDF2具有64k次迭代或更多)來在服務器上散列密碼。
2
如果您不使用SSL,那麼在使用Javascript進行客戶端加密或散列操作時會存在安全漏洞,因爲中間的攻擊者中的一個人可能會在將頁面傳遞給用戶之前刪除客戶端散列代碼。
如果您確實使用SSL,那麼通過實施額外的客戶端安全性幾乎沒有什麼收穫。唯一的好處是攻擊者可以危及加密而不是流的完整性(因此他們只能嗅探數據)。這似乎不太可能,但這是可能的。
爲防止出現這種情況,額外的安全措施要求您首先對密碼進行哈希以匹配服務器如何對其進行哈希處理(包括salt),然後使用提供隨機生成的令牌的服務器對其進行哈希處理(服務器也會記住在會議中)。這確保了某人嗅探連接無法獲取密碼(假設流的完整性未受損),並確保散列版本不能用於重播攻擊(隨機服務器令牌阻止重用)。如果你只在自己的客戶端哈希密碼,那麼沒有什麼可以阻止攻擊者僅僅使用該哈希值來登錄自己。請記住,這是SSL的補充,而不是它的位置。
無論密碼如何傳輸,您應該只在數據庫中存儲密碼的哈希散列版本。理想情況下,使用每個用戶salt(您也要存儲)以及一個安全散列函數(例如SHA-2,而不是SHA-1或MD5)。
相關問題
- 1. Javascript加密庫(客戶端加密|服務器端解密)
- 2. Asp.net C#客戶端和服務器端的加密/解密
- 3. 加密瀏覽器客戶端和服務器端代碼
- 4. C#服務器與java/c#客戶端,aes256加密和解密
- 5. 從服務器加密,在客戶端解密(但不在客戶端加密)?
- 6. 的Http從客戶端加密到服務器和服務器到客戶端
- 7. 如何在客戶端加密密碼並在服務器端解密?
- 8. 客戶端服務器消息加密
- 9. 客戶端服務器AES加密
- 10. 客戶端/服務器,加密通信
- 11. 加密客戶端/解密服務器端JS - PHP
- 12. 加密客戶端和服務器之間的密鑰交換
- 13. 用於密碼的客戶端/服務器密碼學
- 14. ASP.Net和Jquery客戶端密碼傳遞到服務器端
- 15. 客戶端和服務器端密碼強度驗證庫
- 16. 在客戶端/服務器應用程序中加密/解密SMTP密碼
- 17. 加密服務端,解密客戶端(AES)
- 18. 加密服務器上的解密客戶端
- 19. 服務器端客戶端的PyCrypto AES加密通信
- 20. Java:加密的服務器/客戶端雙向通信?
- 21. GWT/JavaScript客戶端密碼加密
- 22. Java - 從服務器再次向客戶端請求密碼
- 23. 客戶端/服務器加密所需的加密註冊碼(ERN)或CCATS?
- 24. 在客戶端和服務器通信中加密消息
- 25. 客戶端加密
- 26. 加密不敏感的客戶端數據並在服務器端解密
- 27. PHP服務器和C++客戶端的Xor加密
- 28. 對服務器和客戶端使用不同的加密庫
- 29. 使用md5.js和PHP解密的客戶端密碼加密
- 30. 加密文件傳輸從客戶端和服務器
如果啓用'HTTPS',則不需要在客戶端加密密碼。 – srkavin