[Py3] - Algoritmo para Des/Codificar

Iniciado por noxonsoftwares, Agosto 08, 2019, 11:33:18 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 08, 2019, 11:33:18 AM Ultima modificación: Agosto 08, 2019, 11:39:13 AM por noxonsoftwares
Hola a todos.

Bueno tenia un tiempo libre y pues a raíz de que un usuario había "echo un nuevo método de codificación (encriptación)" se me ocurrió hacer uno, pero como no soy tan bueno programando (como para inventar una operación matemática furtiva para la encriptación) me las ingenie y salio el siguiente resultado:

Me base en la tabla ASCII pero intentar encriptar algo con eso es súper fácil. Así que intente hacer que sea un poco mas difícil poder entender el texto cifrado.




Ahora el Script

Código: php

import random

def cifra(mensaje):
mensaje = mensaje
for code in mensaje:
codigo = ord(code)
for i in code:
while(True):
a = random.randrange(0,255)
b = random.randrange(0,255)
c = a * b
if(c == codigo):
print(a,b, end="z")
break


Lo que hace el script que cifra el texto es obtener el código (ascii) del carácter y mediante la función random obtener números aleatorios uno A y otro B que al multiplicarlos de el codigo de dicho caracter. Una vez que lo consigue lo imprime en pantalla (el caracter z es solo para darle mas estilo  ::) :o )



Estadisticas y defecto del script
[/b]



El único defecto que podría mencionar es el consumo excesivo de memoria (todo gracias a la función random. Algo que podría decirse que tiene a favor es que por mas que sea el mismo texto a cifrar el resultado seria diferente ya que la función random se encargaría de encontrar diferentes múltiplos para el código del carácter.



Estadisticas del documento (texto a cifrar)







Consumo de memoria







Tiempo de ejecución del script






Metodo para conseguir el texto original

Código: php

def descifra(mensaje):
mensaje = mensaje
lista = []
for i in mensaje.split('z'):
for x in i.split(' '):
lista.append(x)
it = iter(lista)
for x, y in zip(it, it):
print(chr(int(x) * int(y)), end='')



Eso es todo en esta oportunidad, espero sea de utilidad (no se si servirá), que sirva para aprender algo nuevo a quienes inician y pues no se que mas decir. Saludos

PD_ espero poder mejorarlo en algún tiempo que tenga libre.

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Hola!, muy buen aporte, no lo he probado, cuando tenga un tiempo de lo más pequeño sin duda lo hago.

Te Felicito  ;D ...

- DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Gracias. Espero te sea de alguna utilidad jejejeje.

Saludos

Hola @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, gran aporte

En el primer script donde se realiza el cifrado, se podría generar los números aleatorios no de 0 a 255, si no de 1 a la variable codigo
Código: php

...
while(True):
a = random.randrange(1,codigo)
b = random.randrange(1,codigo)
c = a * b
if(c == codigo):
   print(a,b, end="z")
   break
...


Esta forma es un poco más eficiente. Digamos que queremos cifrar el caracter '0' (48), antes, si el randrage estaba de 0 a 255, las variables a y b pudieron haber obtenido valores mayores a 48 y no habría forma de que c obtuviera el número 48.

Por otro lado, si el randrange empieza desde 0, queda la posibilidad de que se obtenga un 0 en alguna de las variables a y b, con lo cual nunca se puede obtener c.

Creo que aún se puede mejorar más. El while se puede remover si se descompone la variable codigo en todos sus posibles múltiplos y se selecciona aleatoriamente la pareja a y b.

Saludos ...