EVP加密解密编程

原创 2016年05月31日 22:29:34

EVP加密解密方式很多,本文采用DES + cbc模式进行


test.c

#include <openssl/des.h>
#include <openssl/evp.h>

//加密
int DesEncrypt(const unsigned char *key,
                                   const unsigned char *iv,
                                   unsigned char *inbuf, int inlen,
                                   unsigned char *outbuf, int *outlen)
{
    EVP_CIPHER_CTX ctx;

    EVP_CIPHER_CTX_init(&ctx);
    EVP_EncryptInit_ex(&ctx, EVP_des_cbc(), NULL, key, iv);

    if (!EVP_EncryptUpdate(&ctx, outbuf, outlen, inbuf, inlen))
    {
        return 1;
    }

    /* Buffer passed to EVP_EncryptFinal() must be after data just
     * encrypted to avoid overwriting it.*/
    int tmplen = 0;

    if (!EVP_EncryptFinal_ex(&ctx, outbuf + *outlen, &tmplen))
    {
        return 0;
    }

    *outlen += tmplen;
    EVP_CIPHER_CTX_cleanup(&ctx);
    return 1;
}

//解密
int DesDecrypt(const unsigned char *key,
                                   const unsigned char *iv,
                                   unsigned char *inbuf, int inlen,
                                   unsigned char *outbuf, int *outlen)
{
    EVP_CIPHER_CTX ctx;

    EVP_CIPHER_CTX_init(&ctx);
    EVP_DecryptInit_ex(&ctx, EVP_des_cbc(), NULL, key, iv);

    if (!EVP_DecryptUpdate(&ctx, outbuf, outlen, inbuf, inlen))
    {
        return 0;
    }

    int tmplen = 0;

    //if (!EVP_DecryptFinal_ex(&ctx, outbuf + *outlen, &tmplen))
    //{
    //    return 0;
    //}

    *outlen += tmplen;
    EVP_CIPHER_CTX_cleanup(&ctx);
    return 1;
}

int main()
{
    char key[]="wj14mrIW";
    char iv[]="OXztOtqc";

    char inbuf[128]="1234";
    char outbuf[128]={0};
    char tmpbuf[128]={0};
    int outLen = 0;
 int tmpLen = 0;
    //加密内容
    DesEncrypt(key,iv,inbuf,strlen(inbuf),outbuf,&outLen);
    printf("outbuf=%s,outLen=%d\n",outbuf,outLen);
 //解密内容
    DesDecrypt(key,iv,outbuf,strlen(outbuf),tmpbuf,&tmpLen);
    printf("tmpbuf=%s,tmpLen=%d\n",tmpbuf,tmpLen);
}
编译:gcc test.c -o test -lssl -lcrypto

版权声明:有不正确的地方,还望各位指正指导,Thanks!

OpenSSL之EVP(三)——EVP对称算法编程示例

des对称算法源代码如下:#include #include void show_hex(unsigned char * s, int len) { for(int i=0; i...
  • scuyxi
  • scuyxi
  • 2017年03月08日 00:59
  • 491

一个简单的使用EVP框架的加密过程

转自 http://blog.csdn.net/njzhujinhua/article/details/6532896     const EVP_CIPHER *cipher;  ...
  • Mirale
  • Mirale
  • 2017年03月21日 15:51
  • 307

使用openssl中的EVP通用加密算法接口的之--解密测试例子

/*********************************************************************  * Author  : Samson  * Date  ...
  • yygydjkthh
  • yygydjkthh
  • 2014年01月22日 16:56
  • 2050

openssl之EVP函数

EVP EVP函数提供一个高层次的接口OpenSSL加密功能。 他们提供以下功能: 一个一致的接口,不管底层算法或模式支持众多的算法加密/解密使用对称和非对称算法签名/验证导出密钥安全...
  • qq_26819733
  • qq_26819733
  • 2016年11月05日 11:30
  • 627

OpenSSL RSA 消息签名与验证

#include #include #include #include void tSign() { unsigned char sign_value[1024]; //保存签名值的数组 ...
  • lrhui0903
  • lrhui0903
  • 2014年10月05日 10:28
  • 2130

openssl框架闲谈--EVP加密/解密接口(附:加密)

openssl 框架中的另一个重头戏就是EVP接口,它提供了所有的加密和解密实现,不但封装了已有的著名算法,而且其简单易用的接口可以让你自己轻松实现一个算法,这 就增强了它的可扩展性,基本上,open...
  • dog250
  • dog250
  • 2010年02月09日 21:28
  • 5249

【OpenSSL】base64 with EVP codecs

Introduction Here are some deoms code of Base64 encoding/decoding with EVP_Encode/EVP_Decode. Encode...
  • wuzh1230
  • wuzh1230
  • 2016年04月28日 09:25
  • 696

21.openssl编程——EVP

21.1 EVP简介 Openssl EVP (high-level cryptographic functions)提供丰富的密码学中的各种函数。 EVP主要封装如下功能函数: a.实现了ba...
  • aixiaoxiaoyu
  • aixiaoxiaoyu
  • 2018年01月26日 19:04
  • 78

openssl之EVP系列之4---EVP_Encrypt系列函数详解(一)

openssl之EVP系列之4---EVP_Encrypt系列函数详解(一)    ---根据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt...
  • gdwzh
  • gdwzh
  • 2003年02月21日 09:09
  • 13696

openssl之EVP

本文参考百度百科和http://blog.csdn.net/gdwzh/article/details/19231 一,什么是openssl?         SSL 是一个缩写,代表的是...
  • drrlalala
  • drrlalala
  • 2015年06月26日 17:00
  • 1214
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EVP加密解密编程
举报原因:
原因补充:

(最多只允许输入30个字)