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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top