Não obtendo uma correspondência sha1 em meu C # para conversão de código PHP, o que eu estou ausente?
-
03-07-2019 - |
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.
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);