IIC2233 / Syllabus-2022-2

Repositorio oficial del curso IIC2233 Programación Avanzada 🚀✨
61 stars 61 forks source link

Duda sobre encriptación y json #338

Open gabo1243 opened 2 years ago

gabo1243 commented 2 years ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Hola, tengo 2 preguntas sobre la tarea. La primera es sobre la encriptación del mensaje. No entiendo muy bien en que parte específica tenemos que encriptar el mensaje. ¿Se encripta cada bloque de 32 bytes por separado? o ¿se encripta TODO el mensaje de una sola vez? Mi pregunta va por que el mensaje debe ir de la siguiente forma:

msg =largo (4bytes) + numero (4bytes) + parte 1 del mensaje (32bytes) + numero (4bytes) + parte 2 del mensaje (32bytes) + .....

con respecto a esto, ¿se encripta msg? o ¿ se encripta cada bloque (parte n del mensaje en 32 bytes) por separado?

La otra pregunta es sobre el uso de json. En el enunciado nunca se dice que sea obligatorio/necesario usar json (creo), pero me di cuenta que usarlo me facilita el envio de información. Entonces ¿se puede pasar el mensaje a json en alguna parte de la codificación para que sea más sencillo? (luego lo pasaría a bytes para enviarlo, pero inicialmente lo tendría en json)

Gracias de antemano

framos9 commented 1 year ago

Hola @gabo1243 Respecto a tu primera duda, lo que se debe encriptar es el mensaje que quieres enviar. Luego de encriptarlo este es codificado y enviado al servidor o al cliente. Recuerda que el contenido del mensaje ya encriptado se encuentra en los bloques de 32 bytes.
Es muy importante que encriptes primero y luego armes el mensaje codificado. Si codificas y luego encriptas cada bloque de 32 bytes por separado te va a quedar mal. Espero haberte aclarado esta duda Respecto a tu segunda duda, si puedes usar json. Quedo atento a mas dudas,

gabo1243 commented 1 year ago

Hola, la verdad no entiendo todavia. Yo lo hice de una forma, pero no se si es lo mismo a lo que te refieres. ¿Podrías ver mi código en la parte de cliente.py en el método codificacion para ver si al menos el orden esta bien?

Gracias de antemano

vicentefez commented 1 year ago

Yo no entendí a que se refiere enviar el número del bloque. Debe haber un solo número o más de uno. Si pueden hacer un ejemplo se agradecería.

framos9 commented 1 year ago

Hola @vicentefez. Un ejemplo seria el siguiente. Supongamos que quieres enviar un mensaje ya encriptado de 96 bytes. Este se tiene que dividir en 3 bloques. Siguiendo la estructura de codificación te quedaría así: |largo del mensaje| |numero de bloque| |Bloque 1| |numero de bloque| |Bloque 2| |numero de bloque| |Bloque 3|

|\x00\x00\x00\x60| |\x01\x00\x00\x00| |Bloque 1| |\x02\x00\x00\x00| |Bloque 2|| |\x03\x00\x00\x00| |Bloque 3|| Recuerda que para el largo del mensaje debe estar en big endian y el numero de bloque en little endian. Espero que el ejemplo te haya aclarado tu duda

framos9 commented 1 year ago

Hola @gabo1243: Realizas bien lo de encriptar antes de seguir con todo el proceso de codificación. Te falta super poco para completar la codificación, se te olvido agregar en el principio los 4 bytes encargados de indicar el largo del contenido del mensaje ya encriptado. Vas bien

gabo1243 commented 1 year ago

Hola, graciass. Los 4 bytes del largo del mensaje se los agregué después en la funcion enviar_mensaje. Aunque no estoy seguro si hay que poner el largo del mensaje con o sin los bytes de numero de bloques. Es decir si el mensaje tiene extension de 64 bytes, con los numeros alcanzaria 72 (64+4*2). Entonces ¿El largo al principio del mensaje debe ser 64 o 72 en este caso? No se sis e entiende bien.

Gracias de antemano

framos9 commented 1 year ago

@gabo1243 Los 4 primeros bytes indican el largo del mensaje luego de ser encriptado. En el caso que planteas el largo debe ser 64. Quizás te sirva bastante ver la figura 3 del enunciado. Además te recomiendo agregar estos bytes en la codificación y no en la función enviar_mensaje.