可以在此处找到指向论坛使用大多数论坛使用的标准md5(md5($salt).md5($password))
格式的IPBoard页面的快速链接:https://www.invisionpower.com/support/guides/_/advanced-and-developers/miscellaneous/passwords-in-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
生成的服务器是使用其他论坛使用的MD5(MD5(salt) + MD5(rawpassword))
方法生成的,包括IPB。这对MyBB起作用,所以我有点心慌。
我已经检查了诸如大写问题等等,但我的确是空白的。
答案 0 :(得分:0)
您使用的密码或盐似乎有问题。在以下示例中,我使用了盐363
和密码password
。
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
String salt = "363";
String password = "password";
String md5 = MD5(MD5(salt) + MD5(password));
System.out.println("MD5: " + md5);
}
public static 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;
}
}
我明白了:
MD5:81a40e9a2b5b97d2ecc28c26cd2d62f4
如果我在MySQL中执行此操作,我会得到相同的MD5哈希:
> SELECT MD5(CONCAT(MD5('363'),MD5('password')));
+-----------------------------------------+
| MD5(CONCAT(MD5('363'),MD5('password'))) |
+-----------------------------------------+
| 81a40e9a2b5b97d2ecc28c26cd2d62f4 |
+-----------------------------------------+
1 row in set (0.00 sec)
你提到Database salt
,所以也许你使用数据库salt实际上每个用户都有自己独特的盐?