Hola amigos, estoy haciendo un tipo de cifrado que consta de tres pasos. el primero divide la frase a codificar en bloques de tres caracteres cada uno y realiza una permutacion asi: El primer caracter se sustituye por el tercero, el segundo por el primero y el tercero por el segundo. Por ejemplo, la cadena abc seria permutada asi: cab. Este es el codigo, por si alguien quiere revisarlo, o mejorarlo. La primera funcion codifica y la segunda decodifica.
#!/usr/bin/python
def trasposicion_caracteres(cadena):
a0=a1=a2=""
n=0
aux=""
if (len(cadena)%3)==1:
cadena=cadena+" "
if (len(cadena)%3)==2:
cadena=cadena+" "
while (n<=len(cadena)-1):
a0=cadena[n+1]
a1=cadena[n+2]
a2=cadena[n]
aux=aux+a0+a1+a2
n=n+3
return aux
def destrasposicion_caracteres(cadena):
a0=a1=a2=""
n=0
aux=""
while (n<=len(cadena)-1):
a0=cadena[n+2]
a1=cadena[n]
a2=cadena[n+1]
aux=aux+a0+a1+a2
n=n+3
return aux
El segundo paso es la sustitucion de cada caracter por otro. Para no complicarnos, yo lo he realizado siguiendo el siguiente algoritmo: a cada caracter se le saca su codigo ASCII mediante la funcion ord() y se sustituye por otro codigo ASCII siguiendo la sencilla funcion discreta biyectiva: F(x)=255-ord(caracter). Esto significa que el caracter t, que tiene el codigo ASCII 112, seria sustituido por el caracter que corresponde al codigo ASCII 255-112=143 con la funcion chr(). E aqui el codigo de codificacion y decodificacion:
#!/usr/bin/python
def sustitucionASCII(cadena):
i=0
aux=""
while (i<=len(cadena)-1):
aux=aux+chr(255-ord(cadena
))
i=i+1
return aux
def resustitucionASCII(cadena):
i=0
aux=""
while (i<=len(cadena)-1):
aux=aux+chr(255-ord(cadena))
i=i+1
return aux
Estos dos pasos, permutacion y sustitucion es la base de sistemas criptograficos com el DES y el AES, de encriptacion simétrica.
Todavia me queda el más importante paso, que es el de la difusion de los datos, que explicare edentro de poco. si veis algun fallo o algo, no dudeis en decirlo. GRACIAS