aes128算法OFB接口
cpp
复制代码
int openssl_aes128_encrypt_ofb(unsigned char *key,unsigned char *iv, unsigned char *in_buf, int in_len, unsigned char *out_buf,int* out_len)
{
EVP_CIPHER_CTX* ctx = NULL;
ctx = EVP_CIPHER_CTX_new();
printf("%s %d\n", __func__, __LINE__);
EVP_EncryptInit_ex(ctx, EVP_aes_128_ofb(), NULL, key, iv);
EVP_CIPHER_CTX_set_padding(ctx, 0);
if (!EVP_EncryptUpdate(ctx, out_buf, out_len, in_buf, in_len))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
int tmplen = 0;
if (!EVP_EncryptFinal_ex(ctx, out_buf + *out_len, &tmplen))
{
EVP_CIPHER_CTX_free(ctx);
return -2;
}
*out_len += tmplen;
EVP_CIPHER_CTX_free(ctx);
return 0;
}
cpp
复制代码
int openssl_aes128_decrypt_ofb(unsigned char *key,unsigned char *iv, unsigned char *in_buf, int in_len, unsigned char *out_buf,int* out_len)
{
int ret = 0;
EVP_CIPHER_CTX* ctx = NULL;
ctx = EVP_CIPHER_CTX_new();
printf("%s %d\n", __func__, __LINE__);
EVP_DecryptInit_ex(ctx, EVP_aes_128_ofb(), NULL, key, iv);
if (!EVP_DecryptUpdate(ctx, out_buf, out_len, in_buf, in_len))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
int tmplen = 0;
ret = EVP_DecryptFinal_ex(ctx, out_buf + *out_len, &tmplen);
if (ret)
{
// RSP_TRACE("%s EVP_DecryptFinal_ex error ret=%d\n", __func__, ret);
EVP_CIPHER_CTX_free(ctx);
return -2;
}
*out_len += tmplen;
EVP_CIPHER_CTX_free(ctx);
return 0;
}