openssl下aes128算法ofb模式加解密运算实例

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;
}
相关推荐
郝学胜-神的一滴几秒前
LangChain Skill 实现(渐进披露 On-Demand Skill,LangChain 官方 Deep Agent Skill 模式)
开发语言·python·langchain·numpy
俊俊几年的6 分钟前
动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100
linux·c++·算法·leetcode·嵌入式·动态规划·c
程序员Query39 分钟前
day01-认识Go语言 + golang环境的安装
开发语言·后端·golang
小雉系统9 小时前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
§ꦿCFོ༉10 小时前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
投图匠10 小时前
十种不同风格的 CTP接口 框架
开发语言·python
唐墨12313 小时前
linux kernel 比较数据大小的宏定义
linux·算法
爱笑的k1114 小时前
nano-vllm 源码剖析:千行 Python 手写离线推理引擎的调度、显存与并行时序
开发语言·python·vllm
拂拉氏14 小时前
【知识讲解-题目讲解】 统计满足K约束的子字符串数量2 (滑动窗口+前缀和+二分查找+分析)
算法·前缀和·二分查找·滑动窗口