La clase BLOWFISH.VCX desarrollada
en Visual FoxPro y permite encriptar y desencritar
cadenas de texto mediante el algoritmo de Blowfish.
Esta clase permite encriptar y desencriptar cadenas
de texto con el algoritmo de Blowfish.
Métodos y propiedades
de la clase Zip.Interface
 |
Propiedades
Metodos
Codificar:
Encripta una cadena de texto, no requiere
contraseña, retorna una cadena de
caracteres y su uso es
=Objeto.Codificar('Mi
Cadena a Encriptar")
retorna "4D6920436164656E61206120456E63726970746172"
Este metodo es desencriptado
por "Decodificar"
CodificarSimple:
Este metodo integra Codificar, ademas necesita
una contraseña para encriptar la
cedena de texto, retorna una cadena de caracteres
y su uso es:
=Objeto.CodificarSimple('Mi
cadena a encriptar','MiContraseña')
retorna " 9AD263D2CFD8D7CFD485526DCEB1D2E0DDE2D5D4D7"
Este metodo es Desencriptado
por " DecodificarSimple"
CodificarBlowfish:
Este metodo integra el anterior e
implementa el algoritmo de Blowfish, al
igual que el anterior tambien necesita una
contraseña, retorna una cadena de
caracteres y su uso es:
=Objeto.CodificarBlowfish('Mi
cadena a encriptar','MiContraseña')
retorna "BF5E4F0609B44091C995
4E12C5E917886A07E7AB9C
3F096C6ECE1610BBA71260
6ECE1610BBA712606ECE16
10BBA712606ECE1610BBA7
12606ECE1610BBA712605D
46408A59B1335D"
Este metodo es Desencriptado
por "DecodificarBlowfish"
Decodificar:
Desencripta una cadena de texto, no requiere
contraseña, su uso es
=Objeto.Decodificar('4D6920436164656E61206120456E63726970746172')
DecodificarSimple:
Este metodo integra Decodificar, ademas
necesita una contraseña para desencriptar
la cedena de texto, su uso es:
=Objeto.DecodificarSimple('9AD263D2CFD8D7CFD485526DCEB1D2E0DDE2D5D4D7','MiContraseña')
DecodificarBlowfish:
Este metodo integra el anterior e implementa
el algoritmo de Blowfish, al igual que el
anterior tambien necesita una contraseña,
su uso es:
=Objeto.CodificarBlowfish('BF5E4F0609B44091C995
4E12C5E917886A07E7AB9C
3F096C6ECE1610BBA71260
6ECE1610BBA712606ECE16
10BBA712606ECE1610BBA7
12606ECE1610BBA712605D
????=>???a?¾??? 46408A59B1335D','MiContraseña')
|
*!*
Programa: "blowfish ejemplo.prg"
LOCAL lcCadenaA
as string,
lcCadenaB as String
SET CLASSLIB TO "blowfish.vcx"
*!* EJEMPLO Codificar y
Decodificar
o=CREATEOBJECT('blowfish.blowfish')
lcCadenaA=o.Codificar('MiNombre')
? lcCadenaA
&& Retorna
"4D6920436164656E61206120456E63726970746172"
? o.Decodificar(lcCadenaA)
&& Retorna MiNombre
*!* EJEMPLO CodificarSimple
y DecodificarSimple
lcCadenaA=o.CodificarSimple('Mi
cadena a encriptar','MiContraseña')
? lcCadenaA
&& Retorna
"9AD263D2CFD8D7CFD485526DCEB1D2E0DDE2D5D4D7"
? o.DecodificarSimple(lcCadenaA,'MiContraseña')
&& Retorna
MiNombre
*!* EJEMPLO CodificarBlowfish
y DecodificarBlowfish
lcCadenaA=o.CodificarBlowfish('Mi
cadena a encriptar','MiContraseña')
? lcCadenaA
&& Retorna
"BF5E4F0609B44091C9954E12C5E917886A07E7AB9C3F096C6ECE1610BBA712606E????=>
CE1610BBA712606ECE1610BBA712606ECE1610BBA7
12606ECE1610BBA712605D 46408A59B1335D"
?o.DecodificarBlowfish(lcCadenaA,'MiContraseña')
&& Retorna
MiNombre |
Nota:
Los tres metodos (Codificar, CodificarSimple
y CodificarBlowfish ) deben ser desencriptados
por los metodos respectivos (Decodificar,
DecodificarSimple, decodificarBlowfish),
ya que cada uno genera una llave distinta
|
En criptografía,
Blowfish es un codificador
de bloques simétricos, diseñado
por Bruce
Schneier en 1993
e incluido en un gran número de suites
de codificadores y productos de cifrado. Mientas
que ningún analizador de cifrados de
Blowfish efectivo ha sido encontrado hoy en
día, se ha dado más atención
de la decodificación de bloques con bloques
más grandes, como AES
y Twofish.
Schneier diseño Blowfish como un algoritmo
de uso general, intentando r????=>???a?¾???eemplazar
al antiguo DES
y libre de problemas asociados con otros algoritmos.
Al mismo tiempo, muchos otros diseños
eran propietarios, patentados o los guardaba
el gobierno. Schneier declaro “Blowfish
no tiene patente, y así se quedara en
los demás continentes. El algoritmo esta
a disposición de dominio público,
y puede ser usado libremente por cualquiera”.
El Algoritmo
Blowfish tiene bloques de 64 bits
de tamaño y un tamaño de escritura
desde 32 bits hasta 448 bits. Es un codificador
de 16 rondas Feistel
y usa largas S-Boxes que dependen de las teclas.
Tiene una estructura similar a CAST-128,
el cual usa S-Boxes modificadas.
Diagrama de Blowfish
El diagrama muestra la acción de Blowfish.
Cada línea representa 32 bits. El algoritmo
mantiene 2 arreglos de subteclas: El de 18 entradas
alineadas en forma P, y 4 de 256 entradas en
S-boxes. Una entrada de las P-aliniadas es usada
cada ronda, después de la ronda final,
cada mitad de la información de cada
bloque es XORed con uno de las 2 P-entradas
que no han sido utilizadas
Diagrama de Blowfish función
F
El diagrama muestra las F funciones de Blowfish.
Las funciones dividen las entrada de 32 bits
en 4 de 8, y usa los cuartos como entradas a
las S-Boxes. Las salidas son agregadas al módulo
231 y son XORed para producir la salida final
de 32 bits.
Desde que Blowfish esta en la red Feistel,
puede ser invertido solo por XORing P17 y P18
al bloque texto codificado, entonces se usa
las Pa-entradas en orden reversivo.
La clave del comienzo de Blowfish esta en la
inicialización de los P-arreglos y las
S-boxes con los valores derivados desde los
dígitos hexadecimales de pi, los cuales
no contienen patrones obvios. El secreto esta
en XORed con las P-entradas en orden, ciclando
la llave si es necesario. Un bloque de 64 bits
vació es encriptado con el algoritmo
como se indica. El texto codificado resultante
reemplaza P1 y P2. Entonces el texto codificado
es encriptado de nuevo con la nuevas subclaves,
P3 y P4 son reemplazados por el nuevo texto
codificado. Esto continúa, reemplazando
los P-arreglo en todo los S-boxes. En todo,
el algoritmo de encriptación Blowfish
correrá 521 veces para generar todas
las subclaves, cerca de 4KB de datos procesados