C#에서 PHP 코드 변환에서 SHA1 일치를 얻지 못하면 무엇이 누락 되었습니까?
-
03-07-2019 - |
문제
비슷한 일을 할 수 있도록 이것을 이해하려고 노력하고 있습니다. 알아요:
BUF는 해시가 추가 된 인증 키를 포함합니다 (마지막 20 바이트) MachineKeysection에서 찾은 해시다타는 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 바이트입니다. 방금 만든 해시를 BUF의 마지막 20 바이트에 추가 한 해시와 비교합니다.
그래서 PHP에서 나는 이것을 시도합니다.
//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);
그리고 다음 단계는 비교하는 것입니다. 그러나 $ HASH 및 SHA1 ($ 티켓)의 출력이 일치하지 않으므로 코드에서 비교하는 것을 방해하지 않았습니다.
해결책
기본적으로 PHP SHA1 () 함수 40 문자 16 진수 번호를 반환합니다. 원하는 경우 20 바이트 이진 형식을 명시 적으로 요청해야합니다.
$hash = sha1( $ticket, true );
다른 팁
$ticket = substr($decrypthex, 0, -20);
$hash = substr($decrypthex, -20);
제휴하지 않습니다 StackOverflow