Non ricevo una corrispondenza sha1 nella conversione del mio codice C # in PHP, cosa mi sto perdendo?

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

Domanda

Sto cercando di capirlo in modo da poter fare qualcosa di simile. Lo so:

buf contiene una chiave di autenticazione con un hash aggiunto (gli ultimi 20 byte) L'HashData che viene cercato in 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;
    }
}

Ecco cosa penso stia accadendo: Stiamo cancellando tutto tranne gli ultimi 20 byte di buf. Quindi, 1 byte alla volta, confrontiamo l'hash che abbiamo appena creato con l'hash che viene aggiunto agli ultimi 20 byte di buf.

Quindi in PHP sto provando questo:

//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 il prossimo passo è il confronto. Ma quando ecto l'output di $ hash e sha1 ($ ticket) non corrispondono, quindi non mi sono nemmeno preoccupato di confrontarli nel codice.

È stato utile?

Soluzione

Per impostazione predefinita, la sha1 () funzione di php di php restituisce un numero esadecimale di 40 caratteri. Devi richiedere esplicitamente il formato binario a 20 byte se è quello che vuoi

$hash = sha1( $ticket, true );

Altri suggerimenti

$ticket = substr($decrypthex, 0, -20);
$hash = substr($decrypthex, -20);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top