2015-01-16 2 views
0

포럼은 대부분의 포럼은 여기에서 찾을 수 있습니다 사용하는 표준 md5(md5($salt).md5($password)) 형식 사용하는 설명하는 IPBoard 페이지로 빠른 링크 : 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 기능을 사용하는 대신 데이터를 가져 와서 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; 
     } 

:

이 작업을 수행하려면, 나는 오랜 시간 동안 사용했던 다음과 같은 MD5 기능을 사용했다.

Database salt: *nzFC 
Database hash: 6bac5cba673134ea084e481b57921134 
Server generated hash: d7f94e3f262e7dee81b12ac087c42b18 

생성 서버 IPB 포함한 다른 포럼 MD5(MD5(salt) + MD5(rawpassword)) 사용하는 방법을 사용하여 생성되었다. 이것은 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"가 완전히 다른 해시입니다. '선택 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 포럼] (http://community.invisionpower.com/)에서 도움을 얻을 수 있어야합니다. – ub3rst4r