• Jueves 28 de Marzo de 2024, 13:10

Autor Tema:  Cifrado en tres pasos  (Leído 1713 veces)

damaroja

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Cifrado en tres pasos
« en: Viernes 20 de Mayo de 2011, 14:03 »
0
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

zerosoft

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Cifrado en tres pasos
« Respuesta #1 en: Viernes 27 de Mayo de 2011, 15:10 »
0
Cita de: "damaroja"
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

HOLA QUE TAL.... BROTHER YO QUIERO APRENDER A PROGRAMAR EN PYTHON DESDE CERO QUIERO SABER QUE NECESITO YA QUE NO TENGO CONOCIMIENTO DE PROGRAMACION.. GRACIAS