我正在使用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)
答案 0 :(得分:0)
不要加密密码,当攻击者获得数据库时,他还将获得加密密钥。仅使用哈希函数是不够的,仅添加盐就不足以提高安全性。使用随机盐在HMAC上迭代大约100毫秒的持续时间,并将盐与哈希一起保存。使用诸如password_hash,PBKDF2,Bcrypt之类的功能或类似功能。关键是要使攻击者花费大量时间通过蛮力查找密码
答案 1 :(得分:-1)
尝试从输入加密密码,并检查加密密码(来自输入)是否与数据库中存在的加密密码匹配。
修改强>
答案来自评论
不要加密密码,当攻击者获得数据库时,他也会获得加密密钥。仅使用哈希函数是不够的,只添加一个盐几乎不能提高安全性。使用随机盐在HMAC上迭代大约100毫秒的持续时间并使用哈希值保存盐。使用password_hash,PBKDF2,Bcrypt等功能或类似功能。关键是要让攻击者花费大量时间通过强力查找密码