Clase para criptografia – VFP 9

AES, Blowfish, MD5, SHA-1, Sustitución, Vernam, Vigenere La criptografía (del griego kryptos, «ocultar», y grafos, «escribir», literalmente «escritura oculta») es el arte o ciencia de cifrar y descifrar información utilizando técnicas matemáticas que hagan posible el intercambio de mensajes de manera que sólo puedan ser leídos por las personas a quienes van dirigidos.

  1. AES
  2. BLOWFISH
  3. MD5
  4. SHA-1
  5. SUSTITUCION
  6. VERNAM
  7. VIGENERE
  8. Ejemplo general de uso
  9. Tabla de rendimiento
  10. DESCARGAR!!!

DESCARGAR

Descargue la clase desde este enlace


AES (v.1.0.3)

Advanced Encryption Standard (AES), también conocido como Rijndael (pronunciado “Rain Doll” en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica.

Metodos

  • Codificar (String MensajeSinCodificar, String Clave) Este metodo recibe dos parametros, el primero es el mensaje a codificar, el segundo es la clave con la cual se desea codificar el mensaje.
  • Decodificar (String MensajeCodificado, String Clave) Este metodo al igual que el anterior recibe dos parametros, el primero es el mensaje codificado , el segundo es la clave con la cual se desea decodificar el mensaje.

Ejemplo

? Objeto.Codificar("Mi mensaje","Mi Clave")
? Objeto.decodificar("D18CC28A324F2F88BC545607D8F7A615","Mi Clave")

Blowfish (v.1.3.5)

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 conjuntos de codificadores y productos de cifrado. Mientras 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ñó Blowfish como un algoritmo de uso general, que intentaba reemplazar al antiguo DES y evitar los problemas asociados con otros algoritmos. Al mismo tiempo, muchos otros diseños eran propiedad privada, patentados o los guardaba el gobierno. Schneier declaró “Blowfish no tiene patente, y así se quedará en los demás continentes. El algoritmo está a disposición del público, y puede ser usado libremente por cualquiera”.

Metodos

  • Codificar(String Mensaje) Encripta una cadena de texto, no requiere contraseña, retorna una cadena de caracteres.
  • CodificarSimple(String Mensaje, String Clave) Este metodo integra Codificar, ademas necesita una contraseña para encriptar la cedena de texto, retorna una cadena de caracteres.
  • CodificarBlowfish(String Mensaje, String Clave) 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.
  • Decodificar(String Mensaje, String Clave) Desencripta una cadena de texto, no requiere contraseña.
  • DecodificarSimple(String Mensaje, String Clave) Este metodo integra Decodificar, ademas necesita una contraseña para desencriptar la cedena de texto.
  • DecodificarBlowfish(String Mensaje, String Clave) Este metodo integra el anterior e implementa el algoritmo de Blowfish, al igual que el anterior tambien necesita una contraseña.

Ejemplo

*!*Codificacion
? Objeto.Codificar('Mi Cadena a Encriptar") &&Desencriptado por "Decodificar"
? Objeto.Decodificar('4D6920436164656E6120....6E63726970746172')

*!*Codificacion Simple
? Objeto.CodificarSimple('Mi cadena a encriptar','MiContraseña') &&Desencriptado por "DecodificarSimple"
? Objeto.DecodificarSimple('9AD263D2CFD8D7C....6DCEB1D2E0DDE2D5D4D7','MiContraseña')

*!* Codificacion Blowfish
? Objeto.CodificarBlowfish('Mi cadena a encriptar','MiContraseña') &&Desencriptado por "DecodificarBlowfish"
? Objeto.DecodificarBlowfish('BF5E4F0609B....2605D46408A59B1335D','MiContraseña')

&& NOTA: Los '....' indican que la cadena es mas larga y que algunos caracteres se han sustituido para visualizar mejor el articulo.

MD5 (v.1.0.7)

El MD5 (abreviatura de Message-Digest Algorithm 5, Algoritmo de Resumen del Mensaje 5) es un algoritmo de reducción criptográfico de 128 bits ampliamente usado.

Metodos

  • Codificar(String Cadena) Reduce una cadena texto, no requiere contraseña, retorna una cadena de caracteres.

Ejemplo

? Objeto.Codificar('Mi Cadena a reducir ")

*!* Al codificar "Esto si es una prueba de MD5"
*!* retornara e07186fbff6107d0274af02b8b930b65
*!* Al codificar "" (Vacio)
*!* retornara d41d8cd98f00b204e9800998ecf8427e
*!* NOTA: Al tratarse de un reductor criptografico se supone que no se puede descodificar.

SHA-1 (v.1.0.6)

La familia SHA (Secure Hash Algorithm, Algoritmo de Hash Seguro) es un sistema de funciones hash criptográficas relacionadas de la Agencia de Seguridad Nacional de los Estados Unidos y publicadas por el National Institute of Standards and Technology (NIST). El primer miembro de la familia fue publicado en 1993 es oficialmente llamado SHA. Sin embargo, hoy día, no oficialmente se le llama SHA-0 para evitar confusiones con sus sucesores. Dos años más tarde el primer sucesor de SHA fue publicado con el nombre de SHA-1. Existen cuatro variantes más que se han publicado desde entonces cuyas diferencias se basan en un diseño algo modificado y rangos de salida incrementados: SHA-224, SHA-256, SHA-384, y SHA-512 (llamándose SHA-2 a todos ellos). En 1998, un ataque a SHA-0 fue encontrado pero no fue reconocido para SHA-1, se desconoce si fue la NSA quien lo descubrió pero aumentó la seguridad del SHA-1.

Metodos

  • Codificar (String Mensaje) Este metodo recibe el mensaje a codificar y retorna una cadena.

Ejemplo

? Objeto.Codificar("Mi mensaje")

*!* Retorna
*!* C2E6689A65582540FABF7E03BF20D636F7D830A5
*!* Al codificar "" (Vacio)
*!* retornara da39a3ee5e6b4b0d3255bfef95601890afd80709.

Sustitucion (v.1.0.0)

El cifrado por sustitución es un método de cifrado por el que unidades de texto plano son sustituidas con texto cifrado siguiendo un sistema regular; las “unidades” pueden ser una sola letra(el caso más común), pares de letras, tríos de letras y mezclas

Metodos

  • Codificar (String Mensaje) Este metodo recibe el mensaje a codificar y retorna una cadena.
  • Decodificar (String MensajeCodificado) Este metodo recibe el mensaje codificado y retorna el mensaje original .

Ejemplo

? Objeto.Codificar("Mi mensaje")
? Objeto.decodificar("EK...D")

Vernam (v.1.0.4)

El sistema de Vernam era un cifrado que combinaba un mensaje con una clave que se leía de un bucle.

Metodos

  • Codificar(String Mensaje, String Clave) Este metodo recibe el mensaje y ademas necesita una contraseña para encriptar la cedena de texto, retorna una cadena de caracteres
  • Decodificar (String MensajeCodificado) Este metodo tambien necesita dos parametros, el primero es el mensaje encriptado, y el segundo la clave, retorna el mensaje original

Propiedades

  • FactorKey Esta propiedad de tipo numerica permite alterar el valor del par de caracteres encriptados, asi por ejemplo el par es expandido por la posición del caracter y el FactorKey

Ejemplo

? Objeto.Codificar("Mi mensaje","mi clave")
? Objeto.decodificar("5X1375X1CC5X1B75X2....4AE5X53C5X5B0","mi clave")

*!* Ejemplo con FactorKey=125 (Por defecto)
*!* 5X1375X1CC5X1B75X2C45X3425X3BD5X4545X4AE5X53C5X5B0
*!* Ejemplo con FactorKey=173
*!* 5X1675X22C5X2475X3845X4325X4DD5X5A45X62E5X6EC5X790

Vigenere (v.1.1.5)

Cifrado polialfabetico y de sustitucion

Metodos

  • Codificar(String Mensaje, String Clave) Este metodo recibe el mensaje y ademas necesita una contraseña para encriptar la cedena de texto, retorna una cadena de caracteres
  • Decodificar (String MensajeCodificado) Este metodo tambien necesita dos parametros, el primero es el mensaje encriptado, y el segundo la clave, retorna el mensaje original

Propiedades

  • FactorKey Esta propiedad de tipo numerica permite alterar el valor del par de caracteres encriptados, asi por ejemplo el par es expandido por la posición del caracter y el FactorKey. Si el FactorKey de Vigenere y Vernam son Iguales la cadena codificada puede ser similar mas no igual

Ejemplo

? Objeto.Codificar("Mi mensaje","mi clave")
? Objeto.decodificar("5X1635X2285X28....E5X6355X6F55X794","mi clave")

*!* Ejemplo con FactorKey=173 (Por defecto)
*!* 5X1635X2285X2885X3845X42F5X4E95X54E5X6355X6F55X794
*!* Ejemplo con FactorKey=125
*!* 5X1335X1C85X1F85X2C45X33F5X3C95X3FE5X4B55X5455X5B4
*!* NOTA: Si el FactorKey de Vigenere y Vernam son Iguales la cadena codificada puede ser similar mas no igual

Ejemplo general de uso

*!* DESCARGE EL ARCHVIVO seguridad.zip, y descomprima, luego ejecute este programa 

LOCAL lcClase, lcAES, lcBlowfish

*!* Cargar la clase y el entorno
lcClase=GETFILE('vcx')
IF FILE(lcClase)
SET PATH TO (FULLPATH(JUSTPATH(lcClase))) ADDITIVE
SET PATH TO (FULLPATH(ADDBS(JUSTPATH(lcClase))+[class.bmp])) ADDITIVE
SET CLASSLIB TO (lcClase) ADDITIVE
ELSE
=MESSAGEBOX("El archivo de clases no existe")
RETURN
ENDIF

CLEAR

*!* Creando objetos
loAes=CREATEOBJECT("seguridad.aes")
lcAES=loAes.codificar("mensaje","clave")
? "AES :"
? lcAES
? loAes.decodificar(lcAES,"clave")

loBlowfish=CREATEOBJECT("seguridad.Blowfish")
lcBlowfish=loBlowfish.codificarBlowfish("mensaje","clave")
? "BLOWFISH:"
? lcBlowfish
? loBlowfish.decodificarBlowfish(lcBlowfish,"clave")

Tabla de eficiencia

Algoritmo

Mensaje encriptado

Encriptando (seg)

Desencriptando (seg)

Numero caracteres

AES EE00DF50887A45EAD2F5E41A80150FEA 5 Menos de 1 32
BLOWFISH BC0381167D33….F8AB6A8DD D04863 Menos de 1 Menos de 1 208
VERNAM 5X12D5X1CB5X246….3375X39B5X43C Menos de 1 Menos de 1 35
VIGENERE 5X15D5X22B5X2B8….4235X4EE5X585 Menos de 1 Menos de 1 35
SUSTITUCION 0K000000A Menos de 1 Menos de 1 27
RSA 3X19F623X855EE3X1FD44X101D8 Menos de 1 Menos de 1 27
SHA-1 A4587025998F528….7FDA3D44B1C96 Menos de 1 –“– 40
MD5 2652EEE01D2620E9C5E55F6AC9D4B433 Menos de 1 –“– 32

Este articulo es migracion del antiguo Blog http://www.tortugaproductiva.galeon.com/docs/criptopack/index.html (Antigua ubicacion), La clase para RSA fue eliminada por ineficiente


Fuentes

Implementacion (2007-2012) por Jose Guillermo Ortiz Hernandez – jgohortiz.blogspot.com

About these ads

About this entry