Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Tarea 1] Input h0 en md5 #18

Open
johntrombon opened this issue Apr 27, 2021 · 6 comments
Open

[Tarea 1] Input h0 en md5 #18

johntrombon opened this issue Apr 27, 2021 · 6 comments

Comments

@johntrombon
Copy link

Hola!
Como la definición de md5 en los anexos del curso utiliza a0, b0, c0 y d0 como valores iniciales en lugar de un h0, ¿como se espera la construcción de estos a partir de un h0? En un principio había asumido que h0 era la concatenación de los 4 inicializadores tomando a0 como el más significativo y d0 como el menos pero estoy teniendo problemas para acceder al canal de mensajes de la pregunta 3 que hacen uso de la función.

A modo de ilustración, si los inicializadores del md5 original son los siguientes
var int a0 := 0x67452301
var int b0 := 0xefcdab89
var int c0 := 0x98badcfe
var int d0 := 0x10325476

¿Cual sería el h0 pasado como parametro para obtener dichos valores? Yo estoy teniendo problemas usando h0 = 0x67452301efcdab8998badcfe10325476

@VicenteMerino
Copy link

Si, yo había hecho lo mismo y tengo el mismo problema, de esa forma no puedo encontrar mis mensajes. Además quiero saber qué pasa si el h0 ingresado es menor a 32 bits? Relleno con 0s a la izquierda? O de qué forma?

@fdduarte
Copy link

Me sumo, tengo el mismo problema.

@mugartec
Copy link
Collaborator

mugartec commented Apr 28, 2021

Hola @johntrombon, @VicenteMerino y @fdduarte,

Disculpen la demora. Primero les cuento que nos descoordinamos con los ayudantes y la función que usamos para generar los mensajes tomaba h0 simplemente como a0 (módulo 232). El resto de las variables se definía tal cual en md5. Por favor cuéntenme por aquí si eso les funciona.

Ahora respecto de la pregunta misma, la forma en que realmente queremos representar a0, b0, c0 y d0 es simplemente dividir h0 en chunks de 4 bytes. El orden considerará que a0 son los 4 bytes de más a la izquierda de h0, es decir a0 = (h0 % (2 ** (32 * 3))) % (2 ** 32) (notar que aplicamos % (2 ** 32) al final en caso de que el parámetro h0 sea mayor a 2128). De la misma forma, d0 estará compuesto por últimos 4 bytes de h0, es decir d0 = h0 % (2 ** 32). b0 y c0 se computan de forma similar.

Siguiendo esta lógica, el h0 correspondiente a las constantes que se definen para md5 y que menciona @johntrombon sería 137269462086865085547664542366969255030 (este valor es incorrecto, ver EDIT más abajo).

Lo que haremos para resolver el problema es publicar otra planilla que tendrá la misma información pero utilizando h0 como se menciona arriba, lo que significa que sólo cambiarán los índices. Me cuentan por favor si se entiende o tienen cualquier comentario. Saludos!


EDIT
Tal como se menciona más abajo el valor h0 de arriba está incorrecto. Dejo aquí el código para generar el valor correcto y que no haya errores:

a0 = 0x67452301
b0 = 0xefcdab89
c0 = 0x98badcfe
d0 = 0x10325476

h0 = a0 * 2 ** (32 * 3)
h0 += b0 * 2 ** (32 * 2)
h0 += c0 * 2 ** 32
h0 += d0

print(h0)
> 137269462086865085541390238039692956790

EDIT 2
Había un pequeño typo en la forma de obtener a0 en base a h0, la forma correcta es

a0 = (h0 // (2 ** (32 * 3))) % (2 ** 32)

@fdduarte
Copy link

Ahí si funciona, gracias!

@johntrombon
Copy link
Author

Profesor, nuevamente no puedo obtener mis mensajes, siendo que ayer pude haciendo uso de la planilla anterior.
El h_0 que utiliza mi implementacion (y con el que obtengo checksums consistentes) es: 0x67452301efcdab8998badcfe10325476
El h_0 que indica usted es 137269462086865085547664542366969255030 = 0x67452301efcdab89efcdab8910325476
Noto que difieren en el penultimo pedazo
0x67452301efcdab8998badcfe10325476
0x67452301efcdab89efcdab8910325476

@Jamidd
Copy link
Collaborator

Jamidd commented Apr 28, 2021

Hola,
estas en lo correcto, hubo un pequeño error.
Prueba con h0 = 137269462086865085541390238039692956790, eso te debería funcionar.
Cualquier cosa nos avisas.
Saludos,
Jaime.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants