2017-04-11 65 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

相关问题