2012-12-06 3 views
2

나는 ASP 사이트를 PHP로 변환하려고합니다. 이 사이트는 타사 API를 사용합니다. 타사 API에는 데이터베이스에 저장된 사용자 ID와 각 사용자의 비밀번호가 필요합니다. 데이터베이스에 암호를 저장하지 않은 ASP 사이트, 대신 그들이 사용자 ID에 기반 할 때마다 암호를 유도하기 위해 다음과 같은 기능을 사용 :ASP 함수를 PHP로 변환하여 암호를 생성하십시오.

function lms_password($user_id) { 
    $hash = md5((int)$user_id); 
    $password = substr($hash,15,4).substr($hash,4,4); 
    return $password; 
} 
: PHP에서

public static string GetLmsUserPassword(int userId) 
{ 
    var hash = userId.ToString().MD5(); 
    return hash.Substring(15, 4) + hash.Substring(4, 4); 
} 

을, 나는 다음을 썼다

그러나 PHP에서 생성 된 암호가 ASP의 암호와 일치하지 않는 것으로 보입니다. ASP에서 md5가 다르게 작동하는지 궁금합니다.

의 예 사용자 ID가 실제로 문자열이 아닌 숫자입니다 : 인해 각각 캐스트 방식에 22E21F5D-7979-467E-928D-4EFCC323BDCB

+6

와우, 그건 끔찍한 생각입니다. – Madbreaks

+1

ASP에서 반환 된 해시와 PHP에서 반환 된 해시가 일치하는지 확인하여 시작 하시겠습니까? 또한 입력으로 int 걸리는 경우 userID.ToString() ASP 코드에서 반환하는 무엇입니까? – koopajah

+0

방금 ​​ASP 함수가 UserID를 int로 입력한다는 것을 알았습니다. 그래서 나는 동일한 기능을 수행하기 위해 함수를 업데이트했다 : – sccr410

답변

1

할 수있는 .NET 및 PHP 버전 간의 결과 차이 int에 문자열. 예제 ID를 모두 캐스팅 해보고 비교해보십시오.

1

ASP : var hash = userId.ToString().MD5();

ToString() 부분을 참조하십시오? 이는 ID가 문자열로 해석되고 있음을 의미합니다.

귀하의 PHP : $hash = md5((int)$user_id);

명시 적으로 완전히 다른 값으로 해시 것 INT,로를 캐스팅합니다. 22E21F5D-7979-467E-928D-4EFCC323BDCB

그래서 ... 왜 당신은 int로 캐스팅됩니다

의 예 사용자 ID 실제로 문자열이 아닌 숫자입니다? : I

편집 : 나는 암호가 사용자 ID의 해시에서 정적으로 생성 된 것처럼 보입니다. 매우 안전합니다.

관련 문제