Domanda

Non credo di essere stato abbastanza specifico l'ultima volta. Eccoci:

Ho una stringa esadecimale:

  

742713478fb3c36e014d004100440041004   e0041004e00000060f347d15798c9010060   6b899c5a98c9014d007900470072006f007   500700000002f0000001f7691944b9a3306   295fb5f1f57ca52090d35b50060606060606

Gli ultimi 20 byte dovrebbero (teoricamente) contenere un hash SHA1 della prima parte (stringa completa - 20 byte). Ma non corrisponde per me.

Sto provando a farlo con PHP, ma senza fortuna. Puoi ottenere una partita?

Biglietto:

  

742713478fb3c36e014d004100   440041004e0041004e00000060   f347d15798c90100606b899c5a   98c9014d007900470072006f00   7500700000002f0000001f7691944b9a

hash sha1 del ticket aggiunto all'originale:

  

3306295fb5f1f57ca52090d35b50060606060606

Il mio hash sha1 del ticket:

  

b6ecd613698ac3533b5f853bf22f6eb4afb94239

Ecco cosa c'è nel biglietto e come viene memorizzato. FWIW, posso estrarre username, ecc. E individuare i vari delimitatori. http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/AuthTicket2. JPG

Modificato: ho scoperto che la stringa è riempita all'estremità dalla funzione di decodifica che passa prima di questo punto. Ho rimosso gli ultimi 6 byte e modificato di conseguenza per ticket e hash. Non funziona ancora, ma sono più vicino.

È stato utile?

Soluzione

Il tuo biglietto viene calcolato sulla stessa stringa esadecimale. Forse l'hash aggiunto viene calcolato su un'altra rappresentazione degli stessi dati?

Altri suggerimenti

Penso che ti stai confondendo su byte vs caratteri.

Internamente, php memorizza ogni carattere in una stringa come byte. L'hash sha1 generato da PHP è una rappresentazione esademica di 40 caratteri (40 byte) dei dati binari di 20 byte, poiché ogni valore binario deve essere rappresentato da 2 caratteri esadecimali.

Non sono sicuro che questa sia la vera fonte della tua discrepanza, ma vedere questo malinteso mi fa chiedermi se sia correlato.

Prova prima a tagliare la stringa, è sorprendentemente facile avere una nuova riga o uno spazio all'estremità che cambi completamente l'hash.

Secondo questo strumento SHA1 online l'hash del testo indicato (dopo aver rimosso il nuovo linee e spazi) è

b6ecd613698ac3533b5f853bf22f6eb4afb94239

Idea: assicurati che i tuoi caratteri di input non siano un numero esadecimale nella versione PHP.

Il problema era che l'originale era un hash con chiave. Ho dovuto usare hash_hmac () con una chiave di validazione piuttosto che sha1 () senza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top