密码加密时登录用户

时间:2017-04-11 14:03:00

标签: java-ee encryption login passwords sha256

我正在使用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());

返回一个布尔值,无论普通密码是否是加密密码。

我遇到Tomcat错误:

  

org.jasypt.exceptions.EncryptionOperationNotPossibleException       org.jasypt.digest.StandardByteDigester.matches(StandardByteDigester.java:1106)       org.jasypt.digest.StandardStringDigester.matches(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)

2 个答案:

答案 0 :(得分:0)

不要加密密码,当攻击者获得数据库时,他还将获得加密密钥。仅使用哈希函数是不够的,仅添加盐就不足以提高安全性。使用随机盐在HMAC上迭代大约100毫秒的持续时间,并将盐与哈希一起保存。使用诸如password_hash,PBKDF2,Bcrypt之类的功能或类似功能。关键是要使攻击者花费大量时间通过蛮力查找密码

答案 1 :(得分:-1)

尝试从输入加密密码,并检查加密密码(来自输入)是否与数据库中存在的加密密码匹配。

修改

答案来自评论

不要加密密码,当攻击者获得数据库时,他也会获得加密密钥。仅使用哈希函数是不够的,只添加一个盐几乎不能提高安全性。使用随机盐在HMAC上迭代大约100毫秒的持续时间并使用哈希值保存盐。使用password_hash,PBKDF2,Bcrypt等功能或类似功能。关键是要让攻击者花费大量时间通过强力查找密码