2017-04-11 128 views
-1

我正在開發一個使用Java EE的應用程序,並且實際遇到了一些麻煩,以瞭解如何驗證用戶,主要問題在於,密碼在數據庫中進行加密時基於電子郵件和密碼進行身份驗證通過Jasypt SHA-256加密算法。在密碼加密的情況下登錄用戶

我可以獲得建議嗎?

ConfigurablePasswordEncryptor passwordEncryptor = new ConfigurablePasswordEncryptor(); 
    passwordEncryptor.setAlgorithm("SHA-256"); 
    passwordEncryptor.setPlainDigest(false); 
    String motDePasseChiffre = passwordEncryptor.encryptPassword(motDePasse); 

    utilisateur.setMdp(motDePasseChiffre); 

編輯

所以我有這個ConfigurablePasswordEncryptor passwordEncryptor = new ConfigurablePasswordEncryptor(); valid=passwordEncryptor.checkPassword(mdp,utilisateur.getMdp());

返回boolean,平原密碼是加密的密碼或者沒有。

我在Tomcat的錯誤:

org.jasypt.exceptions.EncryptionOperationNotPossibleException org.jasypt.digest.StandardByteDigester.matches(StandardByteDigester.java:1106) org.jasypt.digest.StandardStringDigester。匹配(StandardStringDigester.java:1052) org.jasypt.util.password.ConfigurablePasswordEncryptor.checkPassword(ConfigurablePasswordEncryptor.java:251) projet.helpdesk.form.ConnexionForm.connecterUtilisateur(ConnexionForm.java:47) projet.helpdesk.servlets .Authentification.doPost(Authentification.java:30) javax.servlet.http.HttpServlet.service(HttpServlet.java:661) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter .java:53)

+0

請提供您的代碼以及您正在使用的Jasypt SHA-256文檔的鏈接。還要注意哈希不是加密。如果您使用Jasypt ['StrongPasswordEncryptor'](http://www.jasypt.org/api/jasypt/1.9.2/org/jasypt/util/password/StrongPasswordEncryptor.html),那麼這是一個好方法,而且名字是不幸的。 – zaph

+0

由於開發人員沒有花時間理解正確的安全措施是不合理的,因此將用戶的安全置於危險之中,存在任何風險。請參閱Security Stackexchange上的[如何安全散列密碼,理論](http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords/31846#31846)。請參閱OWASP(Open Web Application Security Project)[密碼存儲備忘單](https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet#Leverage_an_adaptive_one-way_function)。 – zaph

+0

不要在問題中加入「已解決」,請發佈解答問題解決方案的答案。 – 1615903

回答

-1

嘗試從輸入中加密密碼,並檢查加密密碼(來自Input)是否與數據庫中存在的加密密碼匹配。

編輯

答案從評論

不加密的密碼,當攻擊者得到的DB,他也將獲得加密密鑰。僅僅使用散列函數是不夠的,只是添加鹽對提高安全性沒有多大作用。使用隨機鹽在HMAC上迭代大約100毫秒的持續時間,並用散列表保存鹽。使用諸如password_hash,PBKDF2,Bcrypt或類似函數的函數。關鍵是要讓攻擊者花費大量時間通過蠻力尋找密碼

+2

不要加密密碼,當攻擊者獲取數據庫時,他也會得到加密密鑰。僅僅使用散列函數是不夠的,只是添加鹽對提高安全性沒有多大作用。使用隨機鹽在HMAC上迭代大約100毫秒的持續時間,並用散列表保存鹽。使用諸如password_hash,PBKDF2,Bcrypt或類似函數的函數。關鍵是要讓攻擊者花費大量時間通過強力查找密碼。 – zaph

+0

加密相同的密碼會產生不同的結果,因此無法通過這種方式進行比較。 – TheNorth

+0

@zaph其實安全性在我的應用中並不算太多,它將用於已經從外部獲得保護的銀行 – TheNorth