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

Duda respecto a rellenar con ceros al final y codificación "big" #294

Open
7 tasks done
Francisco-Aguilera-xd opened this issue Nov 27, 2021 · 5 comments
Open
7 tasks done
Assignees
Labels
resuelto Tarea 3 Dudas sobre la T3

Comments

@Francisco-Aguilera-xd
Copy link

Francisco-Aguilera-xd commented Nov 27, 2021

  • Leí las reglas del foro (https://github.com/IIC2233/syllabus/issues/1)
  • Busqué en las issues si ya preguntaron mi duda y no encontré nada parecido (https://github.com/IIC2233/syllabus/issues)
  • Revisé el compilado de dudas de la tarea y no encontré una issue similar a la mía (Duda SOLES_ROBADOS Syllabus#293)
  • Mi duda no se trata sobre una librería, built-in o mala práctica, ya que eso se pregunta en la issue creada para ello.
  • Mi duda no se trata de un tema administrativo o personal, ya que en ese caso debo contactar a mi profe, al Jefe de Bienestar o al correo del curso (https://iic2233.github.io/contacto/)
  • Utilizaré un título descriptivo y llenaré correctamente esta plantilla
  • De ser necesario, solo colocaré código simple que permita explicar mi problema o duda, ya que compartir código de esta evaluación puede ser considerado copia

Hola!
En el enunciado de la tarea 3 se nos hace la siguiente especificación en el segundo punto del apartado 3.1.3:

"A continuación debes enviar el contenido encriptado del mensaje enviado. Este debe separarse en
bloques de 80 bytes. Cada bloque debe estar precedido de 4 bytes que indiquen el número del bloque,
comenzando a contar desde 0, codificados en big endian. Si el último bloque es menor a 80 bytes,
deberás rellenar al final con bytes 0 (b'\x 00'), hasta completar esa cantidad."

Me surgió la duda si rellenar al final con ceros y utilizar la codificación "big" no traería problemas. Busqué en internet acerca de la codificación big y esta puede ser representada para 8 bits (por ejemplo) de la siguiente manera:
x*2^(7)+x*2^(6)+x*2^(5)+x*2^(4)+x*2^(3)+x*2^(2)+x*2^(1)+x*2^(0)
Donde x es un 0 o 1. Entonces si se quiere guardar el número 1, este sería
00000001
0*2^(7)+0*2^(6)+0*2^(5)+0*2^(4)+0*2^(3)+0*2^(2)+0*2^(1)+1*2^(0) = 1
Pero si por algún motivo, tenemos que rellenar con 2 ceros el byte, debido a la codificación de big van a cambiar el orden de los exponentes, partiendo ahora por el 9 (se agregaron dos ceros) lo que cambiaría nuestro número, cambiaría la información que se quiere transmitir:
0000000100
0*2^9+0*2^8+0*2^(7)+0*2^(6)+0*2^(5)+0*2^(4)+0*2^(3)+1*2^(2)+0*2^(1)+0*2^(0) = 4
Entonces, no se debería rellenar al comienzo con ceros para que no cambie la información?
Gracias de antemano

@Francisco-Aguilera-xd Francisco-Aguilera-xd added the Tarea 3 Dudas sobre la T3 label Nov 27, 2021
@knight-who-says-ni knight-who-says-ni self-assigned this Nov 27, 2021
@knight-who-says-ni
Copy link

Hola @Francisco-Aguilera-xd!!

Muy buena pregunta!! Efectivamente, el rellenar con ceros cambiaría el mensaje enviado, es decir 00000001 no es lo mismo que 0000000100. Es por esto que quien recibe los bytes de vuelta, debe encargarse de sacar los ceros extra que se enviaron.

Por ejemplo, supongamos que el servidor quiere enviar el mensaje "Hola, soy el servidor". Luego de transformarlo a bytes y encriptarlo, quedara con el mensaje a enviar, el cual va a lucir algo asi: b'\x03\x02\x05\x08\x04\02\x05\x05\x00\x07'. Esto se envía con el protocolo de envio, agregandole todos los ceros necesarios. En este caso, se debe enviar los primeros 4 bytes con el largo del mensaje (10), el numero del bloque (0), y el bloque de 80 bytes (que resulta ser el unico): los 10 bytes mencionados anteriormente, y los 70 ceros extra.

Entonces, la idea es que los bytes que el cliente (que recibira el mensaje) decripte primero y luego convierta a string, no sea toda la cadena enviada, sino solo los 10 bytes de importancia (b'\x03\x02\x05\x08\x04\02\x05\x05\x00\x07'), sin incluir los ceros extra.

Espero que se haya entendido, cualquier cosa me comentas.

Saludos y exito programando!!

@Francisco-Aguilera-xd
Copy link
Author

Ahhhh ya, ahora me queda mucho más claro. Muchas gracias!!

@matiasmasjuan
Copy link
Contributor

@Francisco-Aguilera-xd Porfavor no cierres las issues, ya que le puede servir de ayuda a tus demás compañeras y compañeros.

Saludos

@matiasmasjuan matiasmasjuan reopened this Nov 29, 2021
@Francisco-Aguilera-xd
Copy link
Author

Disculpa, pensé que si lo cerraba le ahorraba trabajo a los ayudantes

@fagiannoni
Copy link

Hola @Francisco-Aguilera-xd, complementando la respuesta de mi compañero, justamente te debes encargar de eliminar los ceros extra. Pero solo para aclarar, ojo 👀: que el enunciado pide que se codifique el número de bloque en big endian pero no habla del bloque en sí, ya que si este último se codifica usando 'utf-8' no hay que especificar endianness. Si te interesa investigar un poco más sobre la razón, puedes revisar estas respuestas que lo explican: Respuesta 1, Respuesta 2.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
resuelto Tarea 3 Dudas sobre la T3
Projects
None yet
Development

No branches or pull requests

4 participants