Não obtendo uma correspondência sha1 em meu C # para conversão de código PHP, o que eu estou ausente?

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

Pergunta

Eu estou tentando entender isso para que eu possa fazer algo similar. Eu sei:

buf contém uma chave de autenticação com um hash anexado à mesma (os últimos 20 bytes) O HashData que está sendo procurado no 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;
    }
}

Aqui está o que eu acho que está acontecendo: Estamos hash todos, mas os últimos 20 bytes de buf. Então, nós estamos, 1 byte de cada vez, comparando o hash que acabou de criar para o hash que é acrescentado para os últimos 20 bytes de buf.

Assim, em PHP Eu estou tentando isso:

//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);

E o próximo passo é comparar. Mas quando eu ecoar a saída de US $ haxixe e sha1 ($ ticket) que não correspondem então eu nem sequer incomodado comparando-os no código.

Foi útil?

Solução

Por padrão, a função de php sha1 () retorna um número hexadecimal de 40 caracteres. Você tem que solicitar explicitamente o formato binário de 20 bytes se é isso que você quer

$hash = sha1( $ticket, true );

Outras dicas

$ticket = substr($decrypthex, 0, -20);
$hash = substr($decrypthex, -20);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top