Java IPBoard密码哈希问题,与算法不匹配

Java IPBoard密码哈希问题,与算法不匹配,java,php,mysql,jdbc,ipb,Java,Php,Mysql,Jdbc,Ipb,到IPBoard页面的快速链接说明论坛使用大多数论坛使用的标准md5md5$salt.md5$密码格式,可在此处找到: 实际上,我是使用MyBB的,MyBB使用相同的结构,所以我认为在我的查询中更改表/列名会导致一个相对简单的切换,我错了 我使用的原始查询如下 SELECT * FROM `forum_members` WHERE `name`=? AND `members_pass_hash`= MD5(CONCAT(MD5(members_pass_salt), MD5(?)))" 这是一

到IPBoard页面的快速链接说明论坛使用大多数论坛使用的标准md5md5$salt.md5$密码格式,可在此处找到:

实际上,我是使用MyBB的,MyBB使用相同的结构,所以我认为在我的查询中更改表/列名会导致一个相对简单的切换,我错了

我使用的原始查询如下

SELECT * FROM `forum_members` WHERE `name`=? AND `members_pass_hash`= MD5(CONCAT(MD5(members_pass_salt), MD5(?)))"
这是一个准备好的语句,其中用户名和原始密码由我的服务器提供。不幸的是,这不起作用,我采取了一些步骤并开始调试数据,而不是使用SQLMD5函数,我获取数据并在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;
        }
生成的服务器是使用其他论坛(包括IPB)使用的MD5MD5salt+MD5rawpassword方法生成的。这对MyBB有效,所以我有点慌乱


我已经检查了一些事情,比如资本化问题等,但我完全是一片空白

您使用的密码或密码似乎有问题。在下面的示例中,我使用了salt 363和密码

如果:


您提到了数据库salt,所以可能您在使用数据库salt时,实际上每个用户都有自己独特的salt?

没错,每个用户都有自己独特的salt,而且,在SQL中发出命令会导致:2565f194634d1903e185202fab587ef9,这是一个完全不同的散列。选择MD5CONCATMD5members\u pass\u salt,从遗忘服务器中选择MD5members\u pass\u salt。论坛成员`WHERE member\u id='1``该查询不正确。你让专栏成员在里面放两次盐。第二个应该是原始密码。除了盐和密码错误之外,我不确定还有什么问题。您应该能够从实体编码获得一些帮助,这是问题所在。
Database salt: *nzFC 
Database hash: 6bac5cba673134ea084e481b57921134
Server generated hash: d7f94e3f262e7dee81b12ac087c42b18
/* 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;
    }
}
> SELECT MD5(CONCAT(MD5('363'),MD5('password')));
+-----------------------------------------+
| MD5(CONCAT(MD5('363'),MD5('password'))) |
+-----------------------------------------+
| 81a40e9a2b5b97d2ecc28c26cd2d62f4        |
+-----------------------------------------+
1 row in set (0.00 sec)