-
Notifications
You must be signed in to change notification settings - Fork 47
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
Comments
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: 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 ( Espero que se haya entendido, cualquier cosa me comentas. Saludos y exito programando!! |
Ahhhh ya, ahora me queda mucho más claro. Muchas gracias!! |
@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 |
Disculpa, pensé que si lo cerraba le ahorraba trabajo a los ayudantes |
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. |
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
The text was updated successfully, but these errors were encountered: