2009-03-03 4 views
0

나는 이것을 이해하려고 노력하고 있으므로 비슷한 것을 할 수 있습니다. 나는 알고있다 :C#에서 PHP 코드 변환으로 sha1 일치를 얻지 못했습니다. 무엇이 없습니까?

그것 (지난 20 바이트)에 추가 해시와 인증 키를 포함 버피

MachineKeySection에서보고되고있는 HashData은 SHA1

length -= 20; 
byte[] buffer2 = MachineKeySection.HashData(buf, null, 0, length); 

for (int i = 0; i < 20; i++) 
{ 
    if (buffer2[i] != buf[length + i]) 
    { 
     return null; 
    } 
} 

입니다 여기에 내가 무슨 일이 일어나고 생각입니다 : buf의 마지막 20 바이트를 제외한 모든 것을 해시합니다. 그러면 한 번에 1 바이트 씩 방금 생성 한 해시와 추가 된 해시를 지난 20 바이트의 buf와 비교합니다.

//get the length of the ticket -20 bytes 
$ticketLn = strlen($buf)-40; 
//grab all but the last 20 bytes 
$ticket = substr($decrypthex, 0, $ticketLn); 
//create a hash of the ticket 
$hash = substr($decrypthex, $ticketLn); 

을 그리고 다음 단계는 비교하는 것입니다 :

그래서 PHP에서 나는 이것을 시도하고있다. 그러나 $ hash와 sha1 ($ ticket)의 출력을 에코 할 때 그들은 일치하지 않으므로 나는 코드에서 그들을 비교하는 것을 귀찮게하지 않았습니다.

답변

2

기본적으로 php의 sha1() function은 40 자의 16 진수를 반환합니다. 원하는 경우 20 바이트 바이너리 형식을 명시 적으로 요청해야합니다.

$hash = sha1($ticket, true); 
1
$ticket = substr($decrypthex, 0, -20); 
$hash = substr($decrypthex, -20); 
+0

더 나은 구문을 사용해 주셔서 감사하지만 여전히 필요한 것은 아닙니다. – lynn