UC-IIC3253 / 2022

37 stars 6 forks source link

[T2P2] - bytes hacia números #46

Closed VicenteVicente closed 2 years ago

VicenteVicente commented 2 years ago

Hola!,

Para encriptar los bloques de bytes es necesario pasarlos a números, pero aquí me encontré con un problema: Por ejemplo, siguiendo al enunciado, si tuviese que usar bloques de $256$ bytes, estos no sería posible convertirlos a números (porque sería un número exesivamente grande). ¿Estoy en lo correcto, o no entendí bien como encriptar los bloques?

Saludos!

mugartec commented 2 years ago

Hola @VicenteVicente.

Python no tiene problemas con usar números grandes, para pasar un arreglo de bytes b (de largo arbitrario) a números basta con usar int.from_bytes( b, 'big'). Por ejemplo

>>> import os
>>> b = bytearray(os.urandom(256))
>>> print(b)
bytearray(b"\x96\x1d~\x8cN\xf7\xc1j\xd7\'\xa4\xc3\xdb\x8b/\xe6\x9a,\x107j\\\x04\xc7\x0f\xfd\x8dUb\xa8c\xd2K\x18\x87\xce\'\x05\x9bJ\x91\x97\xdb 8R\x1a\x8a\xfc\xb2t\x1f\x10\x07\xbb\x9c\xb3\xe9\xd0A0\xc4\x92\xe4<K}}*\xddB .yu&\xb3\x05\x0c!\x085\xe7\x8f%m[\xd7;iT\xb8\xbe\x80]EG\t\xefkf\'\xbf9\xda\x84\x89\x88X6\x92Y\xce\xfc\xf2\x00_\xa5m\xca`\x89\xe0\xa4\xdem1\xf7yw\x97\xa5>\xa5\x118\xfe \xb7\x89Z\xbc\xef\x15\x92\xa4\x8a\xb7\xf4\xcc\x0e\x1a\xc5\x14\xafr\xd6\x11C\x8c?\x98\xa4\x0c\x1e\x00R\\\xdb\xd2\x14\x97K\xfd\xff\x04H\xd2\xda\xed\x96\x94\x03\xdf*\xa1G4\xb1\xbd\x15\xcf\x10\xbd9~J\xf2\xc5\xb0\xa2\x17\x0e5\xb7\x8b\x0c\x1e\x9d&\x98\xb6B\x18d\x835\x8e\x83\xa4\x07\x16\x9c\xff\xd2i\xc6\xadX9LL\x1b\x80\x91q\x05\x10@\xce\xd1x+\x16\xbf#\xbeuzC\x8f\xca7{\x04\xcd")

>>> print(int.from_bytes(b, 'big'))
9341430971822294862212097439936637500179019408090689117456007910696657902061325816688162824967665817847665377282146940036407857172048746876031403101321075998738736529324182371434271125649691919514867116437992688797343458791081765312608914941006842256883926220520515265603281918775215993221412112590141475896784796173099784856039481064906142415669230327020628128744086590634252962811143459104510481378167824481623457737047224228611035138211827502710284494910265144676808211297589241259760776886595648629612839757229194048601214509322919531427246458711838474780844490338734331384543555662681965463002531581503435511392

Me cuentas si no queda claro.

VicenteVicente commented 2 years ago

Clarísimo, muchas gracias!