md5(md5($salt).md5($password))
可以在此处找到IPBoard 页面的快速链接,说明该论坛使用大多数论坛使用的标准格式: https ://www.invisionpower.com/support/guides/_/advanced-and-developers/miscellaneous/passwords- ipboard-r130
我实际上来自使用使用相同结构的 MyBB,所以我原以为只需更改查询中的表/列名称就可以进行相对简单的切换,男孩是我错了。
我使用的原始查询如下
SELECT * FROM `forum_members` WHERE `name`=? AND `members_pass_hash`= MD5(CONCAT(MD5(members_pass_salt), MD5(?)))"
这是一个准备好的语句,其中用户名和原始密码由我的服务器提供。不幸的是,这不起作用,我采取了一些步骤并开始调试数据,而不是使用 SQL MD5 函数,我抓取了数据并在 Java 中执行了 MD5 检查,以更好地了解正在发生的事情。
为此,我使用了以下我使用了很长时间的 MD5 函数:
public String MD5(String md5) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
} catch (java.security.NoSuchAlgorithmException e) {
}
return null;
}
这产生了一些稍微奇怪的结果,其中数据不匹配。
Database salt: *nzFC
Database hash: 6bac5cba673134ea084e481b57921134
Server generated hash: d7f94e3f262e7dee81b12ac087c42b18
服务器生成的has是使用MD5(MD5(salt) + MD5(rawpassword))
其他论坛使用的方法生成的,包括IPB。这对 MyBB 有效,所以我有点慌张。
我已经检查了诸如大小写问题等问题,但我完全空白。