2015-01-16 5 views
0

Быстрая ссылка на страницу IPBoard объясняющей, что форум использует стандартный md5(md5($salt).md5($password)) формат, который можно использовать здесь большинство форумов: https://www.invisionpower.com/support/guides/_/advanced-and-developers/miscellaneous/passwords-in-ipboard-r130IPBoard хеширование паролей вопрос, не соответствует алгоритм

Я на самом деле приходят от использования MyBB, который использует ту же структуру, поэтому я бы подумал, что просто изменение имен таблиц и столбцов в моем запросе приведет к относительно простому переключению, мальчик был я неправ.

оригинальный запрос, который я использовал был следующим

SELECT * FROM `forum_members` WHERE `name`=? AND `members_pass_hash`= MD5(CONCAT(MD5(members_pass_salt), MD5(?)))" 

Это подготовленное заявление, в котором имя пользователя и пароль сырым предоставляются моим сервером. Это, к сожалению, не работало, я сделал несколько шагов и начал отлаживать данные, вместо использования функции SQL MD5 я захватил данные и выполнил проверки MD5 на Java, чтобы лучше понять, что происходит.

Для этого я использовал следующие функции 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

Кажется, что-то неправильно с паролем или солью, которую вы используете. В следующих примерах я использовал соль 363 и пароль password.

Если run this code in Java:

/* 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, так что, возможно, вы используете соль базы данных, когда на самом деле каждый пользователь имеет свою уникальную соль?

+0

Правильно, у каждого пользователя есть своя уникальная соль, также выдача команды в SQL приводит к: «2565f194634d1903e185202fab587ef9», который является совершенно другим хэшем. 'SELECT MD5 (CONCAT (MD5 (members_pass_salt), MD5 (members_pass_salt))) FROM' oblivion_server'. 'forum_members' WHERE 'member_id' = '1'' – Hobbyist

+0

Этот запрос неверен. У вас есть столбец '' members_pass_salt'' там дважды. Второй должен быть необработанным паролем. – ub3rst4r

+0

Кроме того, что соль и пароль ошибочны, я не уверен, что еще может быть проблемой. Вы должны получить некоторую помощь от [IPB Forums] (http://community.invisionpower.com/) – ub3rst4r