Pergunta

Eu não acho que eu era suficientemente específico última vez. Aqui vamos nós:

Eu tenho uma string hex:

742713478fb3c36e014d004100440041004 e0041004e00000060f347d15798c9010060 6b899c5a98c9014d007900470072006f007 500700000002f0000001f7691944b9a3306 295fb5f1f57ca52090d35b50060606060606

Os últimos 20 bytes deve (teoricamente) conter um hash SHA1 da primeira parte (string completa - 20 bytes). Mas ele não corresponder para mim.

Tentar fazer isso com PHP, mas sem sorte. você pode obter um jogo?

Ticket:

742713478fb3c36e014d004100 440041004e0041004e00000060 f347d15798c90100606b899c5a 98c9014d007900470072006f00 7500700000002f0000001f7691944b9a

hash SHA1 de bilhete anexado ao original:

3306295fb5f1f57ca52090d35b50060606060606

O meu hash SHA1 do bilhete:

b6ecd613698ac3533b5f853bf22f6eb4afb94239

Aqui está o que está no bilhete e como ele está sendo armazenado. FWIW, eu posso retirar nome de usuário, etc, e identificar os vários delimitadores. http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/AuthTicket2. JPG

Editado: Eu descobri que a cadeia é preenchida na extremidade pela função de descriptografia que atravessa antes deste ponto. I removidos os últimos 6 bytes e ajustado por bilhete e de hash em conformidade. Ainda não funcionar, mas estou mais perto.

Foi útil?

Solução

O bilhete está sendo calculada sobre a string hex si. Talvez o hash anexado é calculado com outra representação dos mesmos dados?

Outras dicas

Eu acho que você está ficando confuso sobre bytes vs caracteres.

Internamente, lojas php cada caractere em uma string como um byte. O hash SHA1 que o PHP gera é uma personagem 40 (40 bytes) hexademical representação dos dados binários de 20 byte, uma vez que as necessidades de cada valor binário a ser representado por 2 caracteres hexadecimais.

Eu não tenho certeza se esta é a verdadeira fonte de sua discrepância, mas vendo este mal-entendido me faz pensar se ele está relacionado.

Tente aparar a corda primeiro, é surpreendentemente fácil ter uma nova linha ou espaço no final que muda o hash completamente.

De acordo com esta ferramenta online SHA1 o hash do texto dado (após a remoção de nova linhas e espaços) é

b6ecd613698ac3533b5f853bf22f6eb4afb94239

Idea:. Certifique-se de seus personagens inputing não é um número hexadecimal para a versão PHP

O problema era que o original era um hash com chave. Eu tive que usar hash_hmac () com uma chave de validação ao invés de sha1 () sem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top