【发布时间】:2018-02-11 00:02:35
【问题描述】:
我有一个散列的 Wordpress 密码数据库。我正在尝试根据数据库存储的密码检查用户的密码,但哈希值不正确。我正在使用this github code 和一些登录isMatch()。任何想法为什么这些密码不匹配?明文密码为alberta10
public boolean isMatch(String password, String storedHash) {
// The first 12 digits of the hash is used to modify the encryption.
String setting = storedHash.substring(0, 12);
logger.log(Level.INFO, "----Hashed pwd from db is: "+storedHash);
logger.log(Level.INFO, "----Hashed pwd using php-pass: "+encrypt(password, setting));
return storedHash.equals(encrypt(password, setting));
}
这是我的authenticate() 方法
private void authenticate(String username, String password) throws Exception {
// Throw an Exception if the credentials are invalid
PasswordHasher pwdHasher=new PasswordHasher();
_logger.log(Level.INFO, "----Authenticating user: "+username);
try{
Connection conn=authenticationBiz.connWordpressDB();
String query = "SELECT * FROM wp_users WHERE user_login = ?";
PreparedStatement preparedStmt = conn.prepareStatement(query);
preparedStmt.setString(1, username);
ResultSet rs=preparedStmt.executeQuery();
rs.next();//get first result
_logger.log(Level.INFO, "----Hashed pwd from db is: "+rs.getString("user_pass"));
if(pwdHasher.isMatch(password,rs.getString("user_pass")))
return;
}
catch(Exception e){
_logger.log(Level.INFO, "----Exception in Authenticating user: "+e);
throw e;
}
throw new Exception();
}
这是日志输出:
----Hashed pwd from db is: $P$BeatnTVG2/U8KZwpaWbPUF4yghHEKf.
17:21:40,997 INFO [com.mollom.phpass] (default task-37) ----Hashed pwd from db is: $P$BeatnTVG2/U8KZwpaWbPUF4yghHEKf.
----Hashed pwd using php-pass: $P$BeatnTVG2etvrth3rlCUdiNRm93PO9xZjXNr1f5s8izUZFfIq70V
【问题讨论】:
-
密码哈希不匹配,因为来自链接的 github 项目的
PasswordHasher不使用与 Wordpress 相同的逻辑来哈希密码。为什么您认为PasswordHasher与您的任务相关?如果是,您是否尝试过联系其作者? -
要获得相同的密码哈希逻辑,您需要为 Java 重写 WordPress 函数
wp_hash_password()。可能不会花你那么长时间。 -
wordpress 代码(在 PHP 中)使用来自 phppass 的
PasswordHasher,根据:core.trac.wordpress.org/browser/tags/4.8/src/wp-includes/…