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

Dudas sobre encriptación #311

Open
FelipeDiazS opened this issue Dec 1, 2021 · 5 comments
Open

Dudas sobre encriptación #311

FelipeDiazS opened this issue Dec 1, 2021 · 5 comments
Assignees
Labels
Tarea 3 Dudas sobre la T3

Comments

@FelipeDiazS
Copy link

Prerrequisitos

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

  • [ X ] Leí las reglas del foro (https://github.com/IIC2233/syllabus/issues/1)
  • [ X ] Busqué en las issues si ya preguntaron mi duda y no encontré nada parecido (https://github.com/IIC2233/syllabus/issues)
  • [ X ] Revisé el compilado de dudas de la tarea y no encontré una issue similar a la mía (Duda SOLES_ROBADOS Syllabus#293)
  • [ X ] 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.
  • [ X ] 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/)
  • [ X ] Utilizaré un título descriptivo y llenaré correctamente esta plantilla
  • [ X ] 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

Duda

Hola, tengo algunas dudas sobre la encriptación de los mensajes.

La primera es sobre la serialización. Por lo que he visto en los contenidos, cuando uno serializa con json, el mensaje no se transforma a bytes, entonces como lo hago para hacer todo lo que se me pide después? o no es necesario serializar? Hay otra issue con una pregunta similar a esta pero no la entendí la verdad.

La segunda es sobre la forma de envío. Por lo que entendí, lo primero que se hace es obtener el largo del mensaje (210 bytes en el ejemplo del enunciado). Después, el mensaje se divide en bloques de 80 bytes, y a cada uno de estos bloques se le aplica esa encriptación ABC y se le agrega un byte n al final (quedarían bloques de 81 bytes?). Después, cuando se juntan todos los bloques, se agregan antes de cada uno 4 bytes que representan el número del bloque. Mi duda es, considerando todas esas cosas que se deben agregar, no me queda un largo mayor al que se obtuvo en un principio? (considerando esos agregados y la suma de 0s que se le hace al último bloque el largo debería ser de 255) No me queda muy claro como funciona esto y si la encriptación ABCn realmente se hace donde dije antes.

De antemano gracias :)

@FelipeDiazS FelipeDiazS added the Tarea 3 Dudas sobre la T3 label Dec 1, 2021
@fagiannoni fagiannoni self-assigned this Dec 2, 2021
@fagiannoni
Copy link

¡Hola @FelipeDiazS! 👋

Respecto a tu primera duda, es correcto lo que dices: si quieres enviar un diccionario, primero debes serializarlo y obtendrás un objeto de tipo string al utilizar el módulo json. Después tendrás que llevarlo a bytearray para poder encriptarlo.

Para el último paso antes de encriptar, recuerda que si conviertes un string a bytes debes usar UTF-8 para no tener problemas con caracteres especiales 👀.


Sobre tu segunda duda, el orden es un poco distinto a como mencionas. Primero debes encriptar el mensaje y luego codificarlo según la estructura de bloques dada.

Entonces, en el ejemplo del enunciado digamos que, por ejemplo, querías enviar un diccionario. Tendrás que seguir los pasos que mencioné en el primer párrafo de esta respuesta para poder encriptar dicho diccionario. Finalmente, el resultado de dicha encriptación fue una cadena de 210 bytes. De esa forma, continúas aplicando el protocolo de envío tal como dice el enunciado. Por lo que la encriptación viene antes de armar los bloques.

Espero haber aclarado tus dudas 😃, si no quedó muy claro puedes volver a preguntar.

@Francisco-Aguilera-xd
Copy link

Francisco-Aguilera-xd commented Dec 5, 2021

Hola!
A mi me surgió una duda. ¿Entonces, tanto el largo del mensaje como el número del bloque también se encriptan? Y también ¿Al final, se desencriptan bloques de 80 bytes o 81, debido al identificador que se agrega al final (0 o 1) de si se reemplazó los 3 por 5 y viceversa?

@fagiannoni
Copy link

fagiannoni commented Dec 7, 2021

Hola @Francisco-Aguilera-xd, la encriptación ocurre al comienzo y solo para el mensaje que deseas enviar, por lo que no debes encriptar el largo del mensaje ni el número de bloque.

Creo que puede serte útil pensarlo de la siguiente forma:

  1. Tienes un objeto que quieres enviar (int, string, dict, etc).
  2. Lo conviertes a bytearray quedandote algo de la forma bytearray(b'...').
  3. Encriptas el resultado del paso 2 según el método de encriptación presentado en el enunciado.
  4. Ahora el resultado del paso 3 es el mensaje encriptado que deberás codificar según la estructura que se menciona en el enunciado en Envío de información antes de presentar el método de encriptación.

O sea, la encriptación va separada de la estructura de codificación, por lo que la codificación recibe un mensaje pero no le interesa si es que ese mensaje está encriptado o no, solamente sabe que el mensaje debe ser codificado con bloques para que el receptor pueda decodificarlo. Luego, si es que el mensaje estaba encriptado entonces el receptor se encargará de desencriptarlo después de haberlo decodificado.

Espero haya quedado un poco más claro, cualquier cosas me comentas 😄

@DonMarto
Copy link

DonMarto commented Dec 9, 2021

Para el último paso antes de encriptar, recuerda que si conviertes un string a bytes debes usar UTF-8 para no tener problemas con caracteres especiales 👀.

Hola, tengo un problema yo con esto, y es que cuando lo convierto a byte, los carácteres no aparecen en estilo "\xnn" o algo así, sino que aparece el mismo string, pero tipo byte (si le pongo type(dict)), y no se que hacer con ello :(
No se que puedo estar haciendo mal, o que parte me falta. En teoría no genera problema esto, ya que igual lo tengo como bytearray y todo. Pero en el momento de encriptar y codificar no puedo hacer como, nada xd

@fagiannoni
Copy link

Hola @DonMarto, tal como se menciona en esta respuesta de la issue 303, solamente deben intercambiar los bytes \x03 y \x05 si es que aparecen.

Sobre el otro tema, no entiendo cual es el problema, ya que no es necesario que aparezcan bytes de la forma hexadecimal. Recuerda de la parte Input/Output de la semana 11 de contenidos que:

Los bytes son el formato de almacenamiento de más bajo nivel. Corresponden a una secuencia de 8 bits (valores 0 ó 1), y pueden representar a un entero entre 0 y 255, un hexadecimal equivalente entre 00 y FF, o un literal (sólo se permiten los caracteres ASCII para representar bytes).

Por lo que puedes tener un objeto tipo bytes que sea por ejemplo b'hola', ya que todos esos bytes se encuentran representados por un caracter ASCII.

Espero haber aclarado tu duda 😀

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

No branches or pull requests

4 participants