Pregunta
No creo que haya sido lo suficientemente específico la última vez. Aquí vamos:
Tengo una cadena hexadecimal:
742713478fb3c36e014d004100440041004 e0041004e00000060f347d15798c9010060 6b899c5a98c9014d007900470072006f007 500700000002f0000001f7691944b9a3306 295fb5f1f57ca52090d35b50060606060606
Los últimos 20 bytes deben (teóricamente) contener un Hash SHA1 de la primera parte (cadena completa - 20 bytes). Pero no coincide para mí.
Intentando hacer esto con PHP, pero no hay suerte. ¿Puedes conseguir un partido?
Ticket:
742713478fb3c36e014d004100 440041004e0041004e00000060 f347d15798c90100606b899c5a 98c9014d007900470072006f00 7500700000002f0000001f7691944b9a
sha1 hash del ticket añadido al original:
3306295fb5f1f57ca52090d35b50060606060606
Mi sha1 hash de ticket:
b6ecd613698ac3533b5f853bf22f6eb4afb94239
Esto es lo que hay en el ticket y cómo se almacena. FWIW, puedo sacar el nombre de usuario, etc., y detectar los diversos delimitadores. http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/AuthTicket2. JPG
Editado: descubrí que la cadena está rellenada al final por la función de descifrado que pasa antes de este punto. Quité los últimos 6 bytes y ajusté por ticket y hash en consecuencia. Todavía no funciona, pero estoy más cerca.
Solución
Tu ticket se está calculando en la cadena hexadecimal. ¿Quizás el hash agregado se calcula en otra representación de los mismos datos?
Otros consejos
Creo que te estás confundiendo con los bytes contra los caracteres.
Internamente, php almacena todos los caracteres en una cadena como un byte. El hash sha1 que genera PHP es una representación hexadímica de 40 caracteres (40 bytes) de los datos binarios de 20 bytes, ya que cada valor binario debe estar representado por 2 caracteres hexadecimales.
No estoy seguro de si esta es la fuente real de su discrepancia, pero ver este malentendido me hace preguntarme si está relacionado.
Intenta recortar la cadena primero, es sorprendentemente fácil tener una nueva línea o espacio en el extremo que cambie el hash por completo.
De acuerdo con esta herramienta SHA1 en línea el hash del texto dado (después de eliminar el nuevo líneas y espacios) es
b6ecd613698ac3533b5f853bf22f6eb4afb94239
Idea: asegúrate de que los caracteres que ingreses no sean un número hexadecimal en la versión de PHP.
El problema era que el original era un hash con clave. Tuve que usar hash_hmac () con una clave de validación en lugar de sha1 () sin.