//xp, window vista, 2003 server ou posterior
//Capicom.dll - Capicom 2.0 - Capicom.h
#define CAPICOM_HASH_ALGORITHM_SHA1 0
#define CAPICOM_HASH_ALGORITHM_MD2 1
#define CAPICOM_HASH_ALGORITHM_MD4 2
#define CAPICOM_HASH_ALGORITHM_MD5 3
#define CAPICOM_HASH_ALGORITHM_SHA_256 4
#define CAPICOM_HASH_ALGORITHM_SHA_384 5
#define CAPICOM_HASH_ALGORITHM_SHA_512 6
#define CAPICOM_ENCRYPTION_ALGORITHM_RC2 0
#define CAPICOM_ENCRYPTION_ALGORITHM_RC4 1
#define CAPICOM_ENCRYPTION_ALGORITHM_DES 2
#define CAPICOM_ENCRYPTION_ALGORITHM_3DES 3
#define CAPICOM_ENCRYPTION_ALGORITHM_AES 4 // v2.0
#define CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM 0
#define CAPICOM_ENCRYPTION_KEY_LENGTH_40_BITS 1
#define CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS 2
#define CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS 3
#define CAPICOM_ENCRYPTION_KEY_LENGTH_192_BITS 4 // AES v2.0
#define CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS 5 // AES v2.0
//EX:
PROCEDURE Main()
//criando um Hash como chave de criptografia
Chave := HashCapiCom( "texto para gerar hash", CAPICOM_HASH_ALGORITHM_SHA_512 )
Cript := CriptCapicom( "teste de criptografia", Chave, CAPICOM_ENCRYPTION_ALGORITHM_AES, CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS )
Descript := DescriptCapiCom( Cript, Chave, CAPICOM_ENCRYPTION_ALGORITHM_AES, CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS )
//criando minha propria chave
Chave := "ADBGB634G"
Cript := CriptCapiCom( "teste de criptografia", CAPICOM_ENCRYPTION_ALGORITHM_AES, CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS )
Descript := DescriptCapiCom( Cript, Chave, CAPICOM_ENCRYPTION_ALGORITHM_AES, CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS )
RETURN
FUNCTION HashCapicom( sTexto, AlgoritimoHash )
LOCAL objHash
IF sTexto = NIL
sTexto := DToS(Date()) + Time()
ENDIF
IF AlgoritimoHash = NIL
AlgoritimoHash := CAPICOM_HASH_ALGORITHM_SHA_512
ENDIF
objHash := CreateObject("CAPICOM.HashedData.1")
objHash:Algorithm := AlgoritimoHash
objHash:Hash( sTexto )
//? "Hash.......: ", objHash:Value
//? "Hash Tamanh: ", Len(objHash:Value)
//? "Algoritimo.: ", objHash:Algorithm
RETURN objHash:Value
FUNCTION CriptCapiCom( sTexto, strHash, AlgoritimoCript, TamanhoChave )
LOCAL objEnc
IF AlgoritimoCript = NIL
AlgoritimoCript := CAPICOM_ENCRYPTION_ALGORITHM_AES
ENDIF
IF TamanhoChave = NIL
TamanhoChave := CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS
ENDIF
objEnc := CreateObject("CAPICOM.EncryptedData.1")
objEnc:Algorithm := AlgoritimoCript
objEnc:Algorithm:KeyLength := TamanhoChave
objEnc:SetSecret( strHash )
objEnc:Content := sTexto
//? "Encriptado.: ", objEnc:Encrypt
//? "Encrip Tam.: ", Len(objEnc:Encrypt)
//? "Algoritimo.: ", objEnc:Algorithm
//?
RETURN objEnc:Encrypt
FUNCTION DescriptCapiCom( sTexto, strHash, AlgoritimoCript, TamanhoChave )
LOCAL objDec
IF AlgoritimoCript = NIL
AlgoritimoCript := CAPICOM_ENCRYPTION_ALGORITHM_AES
ENDIF
IF TamanhoChave = NIL
TamanhoChave := CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS
ENDIF
objDec := CreateObject("CAPICOM.EncryptedData.1")
objDec:Algorithm := AlgoritimoCript
objDec:Algorithm:KeyLength := TamanhoChave
objDec:SetSecret( strHash )
objDec:Decrypt( sTexto )
//? "Descriptado: ", objDec:Content
//? "Descrip Tam: ", Len(objDec:Content)
//? "Algoritimo.: ", objDec:Algorithm
//?
RETURN objDec:Content
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000