C#에서 PHP 코드 변환에서 SHA1 일치를 얻지 못하면 무엇이 누락 되었습니까?

StackOverflow https://stackoverflow.com/questions/607017

문제

비슷한 일을 할 수 있도록 이것을 이해하려고 노력하고 있습니다. 알아요:

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top