Mejorando un poco el codigo Caesar con Python


Mejorando un poco el codigo Caesar con Python, por lo menos intentandolo 😀

Imaginen que estamos por allá en el 50 después de Cristo donde los Nobles eran los únicos que tenían acceso a las letras, tener acceso a las letras era tener un futuro por lo menos garantizado, por lo que el texto en claro repito eran jeroglíficos para la gente común, así que el simple hecho de escribir todo al revés era un cifrado es por esto imagino que el libro “Hacking Secret Ciphers with Python ” lo agrego como el primer ejemplo de un cifrado 😀

Cita: http://www.neoteo.com/el-cifrado-del-cesar/

“Obviamente, su efectividad se basaba en la incapacidad de la mayoría de los contemporáneos de Cesar para leer o escribir. Hoy día, un cifrado como este sería rápidamente descubierto. En realidad, el cifrado de César puede ser atacado por el método de la “fuerza bruta”, simplemente tomando un trozo del texto y probar, uno a uno, todos los desplazamientos posibles que permita el alfabeto utilizado (unos 25 o 30, en general). Cuando se obtiene un texto que tiene sentido, se aplica ese desplazamiento al resto del documento y asunto resuelto.”

También dice que puede ser descubierto por un niño y en realidad tiene razón pero aquí vamos a demostrar que un simple cifrado necesita mas algoritmos de lógica y razonamiento para ser descifrado y es por esto y por otras cosas que gobiernos como los Estados Unidos consideraba toda tecnología de cifrado propia restringida para su exportación, en la misma categoría que el equipamiento militar.
Por que???  simplemente unas cuantas mejoras aquí y allá podrían crear otros algoritmos de cifrado por poner un ejemplo que espero pongamos en practica el Código Enigma del cual habla el Criptonomicom que por cierto es un libro prohibido en ese País si lo leen podrían entender por que 😀

Vamos a hacerle una mejora a nuestro código:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
abc = 'abcdefghijklmnopqrstuvwxyz_'
def cifrar(cadena, clave):
    text_cifrado = ''
    for letra in cadena:
        suma = abc.find(letra) + clave
        modulo = int(suma) % len(abc)
        text_cifrado = text_cifrado + str(abc[modulo])
    return text_cifrado
def decifrar(cadena, clave):
    text_cifrado = ''
    for letra in cadena:
        suma = abc.find(letra) - clave
        modulo = int(suma) % len(abc)
        text_cifrado = text_cifrado + str(abc[modulo])
    return text_cifrado
def main():
    c = str(raw_input('cadena a cifrar: ')).lower()
    n = int(raw_input('clave numerica: '))
    print cifrar(c,n)
    cc = str(raw_input('cadena a decifrar: ')).lower()
    cn = int(raw_input('clave numerica: '))
    print decifrar(cc,cn)
if __name__ == '__main__':
    main()

Y este interesante código por su sencillez nos permitirá crear mas de un algoritmo de cifrado hasta llegar a los hash…. En esta entrada simplemente vamos a agregar la combinación de este algoritmo con este que acabo de modificar para encapsular y generalizar del libro “Hacking Secret Ciphers with Python ”: Acabamos de aprender a encapsular y generalizar 2 conceptos importantes para ser un mejor programador, asi que vamos avanzando 😀

#!/usr/bin/env python
# -*- coding: utf-8 -*-
def vaderetro(message):
    translated = ''
    i = len(message) - 1
    while i >= 0:
        translated = translated + message[i]
        i = i - 1
    return translated

def main():
    message = str(raw_input('cadena a cifrar: ')).lower()
    print vaderetro(message)

if __name__ == '__main__':
    main()

Lo primero que vemos es el pintoresco nombre vaderetro y es que simplemente se lo coloque por que es una de las maneras mas viejas de codificar según entiendo que no necesita de cifrado alguno y si una persona aun de los años digamos 1400 viera un texto al revés no lo entendería a menos que quisiera pensar un momento, así que si a lo que cifremos con esta función le aplicáramos fuerza bruta no lo podríamos romper 😀 por el simple hecho de que ya esta en texto plano…… pero al revés ahora agregamos vaderetro a nuestro código del cifrado de python y hacemos un cifrado combinado que primero coloca todo al revés y luego lo cifra:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
abc = 'abcdefghijklmnopqrstuvwxyz_'
def cifrar(cadena, clave):
    text_cifrado = ''
    for letra in cadena:
        suma = abc.find(letra) + clave
        modulo = int(suma) % len(abc)
        text_cifrado = text_cifrado + str(abc[modulo])
    return text_cifrado
def decifrar(cadena, clave):
    text_cifrado = ''
    for letra in cadena:
        suma = abc.find(letra) - clave
        modulo = int(suma) % len(abc)
        text_cifrado = text_cifrado + str(abc[modulo])
    return text_cifrado
def vaderetro(message):
    translated = ''
    i = len(message) - 1
    while i >= 0:
        translated = translated + message[i]
        i = i - 1
    return translated
def main():
    texto = str(raw_input('cadena a cifrar: ')).lower()
    n = int(raw_input('clave numerica: '))
    c=vaderetro(texto)
    print cifrar(c,n)
    cc = str(raw_input('cadena a decifrar: ')).lower()
    cn = int(raw_input('clave numerica: '))
    print decifrar(cc,cn)
if __name__ == '__main__':
    main()

Aquí les dejo la salida este programa con una frase un tanto extraña… y ahora imaginen si agregamos ruido al texto 😀

Python Type "help", "copyright", "credits" or "license" for more information.
[evaluate untitled-3.py]
cadena a cifrar: hay que espantar al gato antes que se eche la meada, a no era antes de que se eche en el sofa
clave numerica: 5
fktxeqjesjejmhjejxejzvejiexjysfefwjetsefeefifjrefqejmhjejxejzvexjysfetyfleqfewfysfuxjejzvecfm
cadena a decifrar: fktxeqjesjejmhjejxejzvejiexjysfefwjetsefeefifjrefqejmhjejxejzvexjysfetyfleqfewfysfuxjejzvecfm
clave numerica: 5
afos_le_ne_ehce_es_euq_ed_setna_are_on_a__adaem_al_ehce_es_euq_setna_otag_la_ratnapse_euq_yah

Esto no fue nada difícil pero en esos tiempos no habían computadoras 😀 y bueno ahora imaginen cambiar las primeras N letras o N palabras y cambiar a otro desplazamiento :S se pondría mas difícil el cifrado pero esto ya es parte de otro algoritmo o código antes mencionado 😀
Les deje una tarea si corren el codigo veran el final de atras para adelante o al reves asi que vamos a modificar 😀

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s