CryptoPACK Clase para criptografia SOLO VFP9

www.
   tortugaproductiva.
       galeon.com
Corriendo sobre el zorro

Navegación
Artículo del mes.
Clases y ejemplos
Manuales
Aplicaciones para Pocket
Descargas
Otros lenguajes
Paginas de interes
 
Enlaces Fox
 
FoxBey Comunidad de Profesionales
 
 
www.tortugaproductiva.galeon.com
 
 
Contador gratis contadorplus.com Contador gratis contadorplus.com
Artículos   Discusión   Buscar   Proyectos  

Clase para criptografia
AES, Blowfish, MD5, RSA, 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.

Para VFP 9
--> DESCARGAR SEGURIDAD.VCX<--

I. AES
II. Blowfish
III. MD5
IV. RSA
V. SHA-1
VI. Sustitución
VII. Vernam
VIII. Vigenere
IX. Tabla comparativa
X. Descargar

Esta clase implementa los algoritmos de AES (Advanced Encryption Standard o también conocido como Rijndael), Blowfish, MD5 (Algoritmo de Resumen del Mensaje 5), RSA (Recibe su nombre por la inicial del apellido de sus inventores: Ronald Rivest, Adi Shamir y Leonard Adleman), SHA-1 (Algoritmo de Hash Seguro), Sustitución, Vernam y Vigenere.

Cada uno de los miembros de la clase estan basados en un objeto cusom.

Atención: Esta clase esta diseñada en Visual FoxPro 9.0 y puede utilizar comandos no soportados por versiones anteriores. Por lo tanto esta clase puede NO ser compatible conversiones de FoxPro, ademas las clases Blowfish, Vernam y MD5 no son compatibles con versiones anteriores de las clases.

Esta clase no se ha probado en versiones anteriores a la 9.0

 

La Clase Seguridad.vcx y sus objetos

AES (Objeto Ver 1.0.3)
En criptografía, Advanced Encryption Standard (AES), también conocido como Rijndael, 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 Estandares 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. El cifrador fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y enviado al proceso de selección AES bajo el nombre "Rijndael".

Metodos y propiedades

Codificar (String Mensaje, 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.

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

*!* Retorna
*!* D18CC28A324F2F88BC545607D8F7A615


Deodificar (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.

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

*!* Retorna
*!* Mi mensaje

 

BLOWFISH (Objeto Ver 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, intentando reemplazar 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 quedará en los demás continentes. El algoritmo está a disposición de dominio público, y puede ser usado libremente por cualquiera”.

Metodos y propiedades

Codificar(String Mensaje)
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(String Mensaje, String Clave)
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
*!* 9AD263D2CFD8D7CF....EB1D2E0DDE2D5D4D7

Este metodo es Desencriptado por " DecodificarSimple"


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 y su uso es

? Objeto.CodificarBlowfish('Mi cadena a encriptar','MiContraseña')

*!* Rretorna
*!* BF5E4F0....35D

Este metodo es Desencriptado por "DecodificarBlowfish"


Decodificar(String Mensaje, String Clave)
Desencripta una cadena de texto, no requiere contraseña, su uso es

? Objeto.Decodificar('4D6920436164656E6120....6E63726970746172')


DecodificarSimple(String Mensaje, String Clave)
Este metodo integra Decodificar, ademas necesita una contraseña para desencriptar la cedena de texto, su uso es

? Objeto.DecodificarSimple('9AD263D2CFD8D7C....6DCEB1D2E0DDE2D5D4D7','MiContraseña')


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, su uso es

? Objeto.CodificarBlowfish('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 (Objeto Ver 1.0.7)
Es uno de los algoritmos de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto Tecnológico de Masachusets). Fue desarrollado en 1991 como reemplazo del algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad. A pesar de su amplia difusión actual, la sucesión de problemas de seguridad detectados desde que, en 1996, Hans Dobbertin anunciase una colisión de hash plantea una serie de dudas acerca de su uso futuro..

Metodos y propiedades

Codificar(String Cadena)
Reduce una cadena texto, no requiere contraseña, retorna una cadena de caracteres y su uso es:

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

*!* Retorna
*!* 4D6920436164656E61206120456E63726970746172

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.

 

RSA Variación (Objeto Ver 1.5.8)
El sistema criptográfico con clave pública RSA es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye (en forma autenticada preferentemente), y otra privada, la cual es guardada en secreto por su propietario. Una clave es un número de gran tamaño, que una persona puede conceptualizar como un mensaje digital, como un archivo binario o como una cadena de bits o bytes. Cuando se envía un mensaje, el emisor busca la clave pública de cifrado del receptor y una vez que dicho mensaje llega al receptor, éste se ocupa de descifrarlo usando su clave oculta. Los mensajes enviados usando el algoritmo RSA se representan mediante números y el funcionamiento se basa en el producto de dos números primos grandes (mayores que 10100) elegidos al azar para conformar la clave de descifrado. Emplea expresiones exponenciales en aritmética modular. La seguridad de este algoritmo radica en que no hay maneras rápidas conocidas de factorizar un número grande en sus factores primos utilizando computadoras tradicionales. La computación cuántica podría proveer una solución a este problema de factorización.

Este objeto a un que implementa el algoritmo de RSA (Exponenciación modular), no utiliza numeros primos grandes y la clave publica no es distribuida.

Metodos y propiedades

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

? Objeto.Codificar("Mi mensaje")

*!* Retorna
*!* 3X83AC33X5B06F3X8B6A43X4B2XF3X56821


Deodificar (String MensajeCodificado)
Este recibe el mensaje codificado y retorna el mensaje original.

? Objeto.decodificar("3X83AC33X5B06F3X8B6A43X4B2XF3X56821")

*!* Retorna
*!* Mi mensaje

 

 

SHA-1 (Objeto Ver 1.0.6)
La familia SHA (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 (todos ellos son referidos como SHA-2).

Metodos y propiedades

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

? Objeto.Codificar("Mi mensaje")

*!* Retorna
*!* C2E6689A65582540FABF7E03BF20D636F7D830A5

Al codificar "" (Vacio)
retornara da39a3ee5e6b4b0d3255bfef95601890afd80709

 

SUSTITUCION (Objeto Ver 1.0.0)
En criptografía, 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, mezclas de lo anterior, entre otros. El receptor descifra el texto realizando la sustitución inversa. Los cifrados por sustitución son comparables a los cifrados por transposición. En un cifrado por transposición, las unidades del texto plano son cambiadas usando una ordenación diferente y normalmente bastante compleja, pero las unidades en sí mismas no son modificadas. Por el contrario, en un cifrado por sustitución, las unidades del texto plano mantienen el mismo orden, lo que se cambia son las propias unidades del texto plano. Existen diversos tipos de cifrados por sustitución. Si el cifrado opera sobre letras simples, se denomina cifrado por sustitución simple; un cifrado que opera sobre grupos de letras se denomina, poligráfico. Un cifrado monoalfabético usa una sustitución fija para todo el mensaje, mientras que un cifrado polialfabético usa diferentes sustituciones en diferentes momentos del mensaje-por ejemplo los homófonos, en los que una unidad del texto plano es sustituida por una de entre varias posibilidades existentes para el texto cifrado.

Metodos y propiedades

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

? Objeto.Codificar("Mi mensaje")

*!* Retorna
*!* EKRZYEYLZD


Deodificar (String MensajeCodificado)
Este metodo recibe el mensaje codificado y retorna el mensaje original .

? Objeto.decodificar("EKRZYEYLZD")

*!* Retorna
*!* Mi mensaje

VERNAM (Objeto Ver 1.0.4)
El cifrado Vernam es un algoritmo de criptografía inventado por Gilbert Vernam, ingeniero AT&T Bell Labs, en 1917. En terminología moderna, un cifrado de Vernam es un cifrado de flujo en el que el texto en claro se combina, mediante la operación XOR, con un flujo de datos aleatorio o pseudoaleatorio del mismo tamaño, para generar un texto cifrado. El uso de datos pseudoaleatorios generados por un generador de números pseudoaleatorios criptográficamente seguro es una manera común y efectiva de construir un cifrado en flujo. Las dos ideas, combinadas con el uso único de las claves, implementan la libreta de un solo uso, aunque ninguno de los dos inventores utilizó ese nombre. Claude Shannon, también de Bell Labs, demostró que la libreta de un solo uso es irrompible (trabajo realizado entre 1940 y 1945; publicado por primera vez en la Bell Labs Technical Journal, 1948/49). Es el primer y único método de cifrado para el que existe tal demostración..

Metodos y propiedades

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 y su uso es:

? Objeto.CodificarSimple("Mi mensaje","mi clave")

*!* Retorna
*!* 5X1375X1CC5X1B75X2C45X3425X3BD5X4545X4AE5X53C5X5B0


Deodificar (String MensajeCodificado)
Este metodo tambien necesita dos parametros, el primero es el mensaje encriptado, y el segundo la clave, retorna el mensaje original

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

*!* Retorna
*!* Mi mensaje


23.07.2007 9:37lass="TextoNormal">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 con FactorKey=125 (Por defecto)
5X1375X1CC5X1B75X2C45X3425X3BD5X4545X4AE5X53C5X5B0

Ejemplo con FactorKey=173
5X1675X22C5X2475X3845X4325X4DD5X5A45X62E5X6EC5X790

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

 

VIGENERE (Objeto Ver 1.1.5)
El cifrado Vigenère es un cifrado basado en diferentes series de carácteres o letras del cifrado César formando estos carácteres una tabla, llamada tabla de Vigenère, usada como clave. El cifrado de Vigenère es un cifrado polialfabético y de sustitución (Combina Vernam y Sustitución). El cifrado Vigenère se ha reinventado muchas veces. El método original fue descrito por Giovan Batista Belaso en su libro 1553 La cifra del Sig. Giovan Batista Belaso, sin embargo, fue desatribudo muy tarde a Blaise de Vigenère, concretamente en el siglo XIX, y por ello se conoce como el "cifrado Vigenère". Este cifrado es conocido, porque es fácil de entender e implementar, además parece irrompible; esto le hizo valedor del apodo el código indescifrable (le chiffre indéchiffrable, en francés)..

Metodos y propiedades

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 y su uso es:

? Objeto.CodificarSimple("Mi mensaje","mi clave")

*!* Retorna
*!* 5X1635X2285X2885X3845X42F5X4E95X54E5X6355X6F55X794


Deodificar (String MensajeCodificado)
Este metodo tambien necesita dos parametros, el primero es el mensaje encriptado, y el segundo la clave, retorna el mensaje original

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

*!* Retorna
*!* Mi mensaje


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 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


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


Tabla comparativa
Mensaje="Mensaje"
Clave="Clave"

Algorritmo

Mensaje encriptado

Tiempo
Encrip.
(Seg)

Tiempo
Desencrip.
(Seg)

Largo
Cadena
Encriptada

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

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

Ejemplo

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

LOCAL lcClase

*!* 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")
a=loAes.codificar("mensaje","clave")
? "AES :"
? a
? loAes.decodificar(a,"clave")

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

 

 

José Guillermo Ortiz Hernández ©1981-2007
Todos los derechos reservados.

19.07.2007 12:22