Problema con encriptacion Simetrica con HBSSL
Posted: Sun Mar 05, 2017 2:41 am
Hola,
Pude compilar y ejecutar CORRECTAMENTE el código (modificado para Fivewin) que viene en el archivo crypt.prg en la carpeta Tests del Contrib de Hbssl, es decir, puede encriptar y desencriptar utilizando el algoritmo "AES-192-OFB" como viene el ejemplo original (recortado):
//--inicio del código
SSL_INIT()
OpenSSL_add_all_ciphers()
ctx := hb_EVP_CIPHER_CTX_create()
EVP_CIPHER_CTX_init( ctx )
//--------- IMPLEMENTADO EN UNA FUNCION INDEPENDIENTE como ENCRIPTA(cData)
EVP_EncryptInit( ctx, "AES-192-OFB", cKey )
? EVP_CIPHER_CTX_cipher( ctx )
? EVP_CIPHER_block_size( EVP_CIPHER_CTX_cipher( ctx ) )
encrypted := ""
result := ""
EVP_EncryptUpdate( ctx, @result, cData )
encrypted += result
EVP_EncryptFinal( ctx, @result )
encrypted += result
? "ENCRYTPTED", ">" + hb_StrToHex( encrypted ) + "<"
? ">" + encrypted + "<"
ctx := hb_EVP_CIPHER_CTX_create()
//-----------IMPLEMENTADO EN UNA FUNCION INDEPENDIENTE como DESENCRIPTA(cDataEncrypted)
EVP_DecryptInit( ctx, "AES-192-OFB", cKey )
decrypted := ""
result := ""
EVP_DecryptUpdate( ctx, @result, cDataEncrypted )
decrypted += result
EVP_DecryptFinal( ctx, @result )
decrypted += result
? "DECRYTPTED", ">" + decrypted + "<"
RETURN ( hb_StrToHex(decrypted ) )
//----Fin del codigo
Al convertir el ejemplo a dos funciones independientes, una para encriptar y otra para desencriptar, sin embargo, no arroja el mismo resultado al tratar de desencriptar.
Pienso que es posible que este algoritmo requiera una IV (Initiation Vector) y no se lo he dado. No se lo doy porque no conozco su nombre, sintaxis ni la estructura para hacerlo. Puede tambien ser otro problema que desconozco. Sin embargo si alimento desde un archivo Txt el texto encriptado, la función lo desencripta correctamente, pienso que es eso porque estoy simulando el programa original distribuido en crypt.prg y las variables necesarias están inicializadas correctamente. Mucho les agradeceré si alguien puede decirme que me falta para que funcione la función de Desencripta(cDataEncrypted) en forma independiente (del ejemplo original).
Muchas gracias por su atención.
Pude compilar y ejecutar CORRECTAMENTE el código (modificado para Fivewin) que viene en el archivo crypt.prg en la carpeta Tests del Contrib de Hbssl, es decir, puede encriptar y desencriptar utilizando el algoritmo "AES-192-OFB" como viene el ejemplo original (recortado):
//--inicio del código
SSL_INIT()
OpenSSL_add_all_ciphers()
ctx := hb_EVP_CIPHER_CTX_create()
EVP_CIPHER_CTX_init( ctx )
//--------- IMPLEMENTADO EN UNA FUNCION INDEPENDIENTE como ENCRIPTA(cData)
EVP_EncryptInit( ctx, "AES-192-OFB", cKey )
? EVP_CIPHER_CTX_cipher( ctx )
? EVP_CIPHER_block_size( EVP_CIPHER_CTX_cipher( ctx ) )
encrypted := ""
result := ""
EVP_EncryptUpdate( ctx, @result, cData )
encrypted += result
EVP_EncryptFinal( ctx, @result )
encrypted += result
? "ENCRYTPTED", ">" + hb_StrToHex( encrypted ) + "<"
? ">" + encrypted + "<"
ctx := hb_EVP_CIPHER_CTX_create()
//-----------IMPLEMENTADO EN UNA FUNCION INDEPENDIENTE como DESENCRIPTA(cDataEncrypted)
EVP_DecryptInit( ctx, "AES-192-OFB", cKey )
decrypted := ""
result := ""
EVP_DecryptUpdate( ctx, @result, cDataEncrypted )
decrypted += result
EVP_DecryptFinal( ctx, @result )
decrypted += result
? "DECRYTPTED", ">" + decrypted + "<"
RETURN ( hb_StrToHex(decrypted ) )
//----Fin del codigo
Al convertir el ejemplo a dos funciones independientes, una para encriptar y otra para desencriptar, sin embargo, no arroja el mismo resultado al tratar de desencriptar.
Pienso que es posible que este algoritmo requiera una IV (Initiation Vector) y no se lo he dado. No se lo doy porque no conozco su nombre, sintaxis ni la estructura para hacerlo. Puede tambien ser otro problema que desconozco. Sin embargo si alimento desde un archivo Txt el texto encriptado, la función lo desencripta correctamente, pienso que es eso porque estoy simulando el programa original distribuido en crypt.prg y las variables necesarias están inicializadas correctamente. Mucho les agradeceré si alguien puede decirme que me falta para que funcione la función de Desencripta(cDataEncrypted) en forma independiente (del ejemplo original).
Muchas gracias por su atención.