当前位置: 首页 > news >正文

openssl的aes128_ECB加密解密运算实例

aes128算法ECB接口

加密接口

注意事项:

  • EVP_EncryptInit_ex初始化算法EVP_aes_128_ecb(),和密钥,key至少16B
  • EVP_EncryptUpdate加密运算,tmplen输出已加密长度
  • EVP_EncryptFinal_ex结束运算,如果在此仍有加密运算,则加密长度tmplen需补充到密文长度中

int openssl_aes128_encrypt_ecb(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();
    int tmplen = 0;
    printf("%s %d\n", __func__, __LINE__);
    EVP_EncryptInit_ex(ctx, EVP_aes_128_ecb(), NULL, key, NULL);
    
    if (!EVP_EncryptUpdate(ctx, out_buf, &tmplen, in_buf, in_len))
    {
        EVP_CIPHER_CTX_free(ctx);
        return -1;
    }
    *out_len = tmplen;

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

解密接口

注意事项:

  • EVP_DecryptInit_ex初始化算法EVP_aes_128_ecb(),和密钥,key至少16B
  • EVP_DecryptUpdate解密运算,tmplen输出已解密长度
  • 如果剩余字节是16B,再次使用EVP_DecryptUpdate
  • 如果剩余字节不是16B整数倍,使用EVP_EncryptFinal_ex结束运算,输出加密长度tmplen补充到密文长度中


int openssl_aes128_decrypt_ecb(unsigned char *key,unsigned char *iv, unsigned char *in_buf, int in_len, unsigned char *out_buf,int* out_len)
{
    int ret = 0 ,tmplen = 0;
    EVP_CIPHER_CTX* ctx = NULL;
    ctx = EVP_CIPHER_CTX_new();
    EVP_CIPHER_CTX_set_padding(ctx, 0);
    printf("%s %d\n", __func__, __LINE__);

    EVP_DecryptInit_ex(ctx, EVP_aes_128_ecb(), NULL, key, NULL);

    if (!EVP_DecryptUpdate(ctx, out_buf, &tmplen, in_buf, in_len))
    {
        EVP_CIPHER_CTX_free(ctx);
        return -1;
    }
    *out_len = tmplen;

    if (in_len > tmplen) {
        if (!EVP_DecryptUpdate(ctx, out_buf+tmplen, &tmplen, in_buf+tmplen, in_len-tmplen))
        {
        //        RSP_TRACE("%s EVP_DecryptUpdate error \n", __func__);
            EVP_CIPHER_CTX_free(ctx);
            return -1;
        }
        *out_len += tmplen;
    }

    if (in_len %16!=0){
        ret = EVP_DecryptFinal_ex(ctx, out_buf+tmplen, &tmplen);
        fprintf(stderr, "err:\n");
        if (ret != 0)
        {
        //        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 ;
}



相关文章:

  • 【精】使用 Apktool 反编译 APK 并重新签名的详细教程
  • 工具MyBatis Generator(MBG)
  • 网页聊天室测试报告
  • ubuntu下r8125网卡重启丢失修复案例一则
  • 使用 Java 更新 Word 文档中的图表数据-超详细
  • Qt 对象树详解:从原理到运用
  • 多线程之旅:锁策略
  • C++中map容器常见用法(AI)
  • 游戏引擎学习第127天
  • Spring Boot 集成 EasyExcel 导出 Excel 文件【复杂表头】
  • python绘图之三维核密度图
  • PostgreSQL 中进行数据导入和导出
  • BladeX框架接口请求跨域
  • 我的AI工具箱Tauri版-ClothSwapSemanticSegmentationFullAuto语义切割全自动换装
  • C++11相较于C++98的新特性介绍:列表初始化,右值引用与移动语义
  • 高压风机专用32位单片机MM32SPIN080G
  • 车载资通讯系统结合5G技术!专业ESD对策打造高可靠度车联网
  • Hadoop架构详解
  • Lumoz Chain正式上线:AI 时代的新算力破局者
  • 第38天:安全开发-JavaEE应用SpringBoot框架MyBatis注入Thymeleaf模版注入
  • 凡科做的网站手机版/优化整站
  • 高端网站制作网站设计/百度首页网站推广多少钱一年
  • 佛山java web网站开发/跟我学seo从入门到精通
  • 手机网站怎么打开/直接进网站的浏览器
  • 做网站PAAS系统/百度关键词怎么设置
  • 上海热线网站建设/爱站seo工具包下载