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.
(https://proxy.duckduckgo.com/iu/?u=https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Fd%2Fdd%2FASCII-Table.svg%2F946px-ASCII-Table.svg.png&f=1)
Ahora el Script
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)
(https://i.imgur.com/CT9NMWk.png)
Consumo de memoria
(https://i.imgur.com/s3KaqIb.png)
Tiempo de ejecución del script
(https://i.imgur.com/8UWMC4q.png)
Metodo para conseguir el texto original
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.
@noxonsoftwares (https://underc0de.org/foro/index.php?action=profile;u=14736)
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
@DtxdF (https://underc0de.org/foro/index.php?action=profile;u=71723)
Gracias. Espero te sea de alguna utilidad jejejeje.
Saludos
Hola @noxonsoftwares (https://underc0de.org/foro/index.php?action=profile;u=14736), 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
...
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 ...