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_des_ede3_cbc CBC方式的3个密钥的3DES算法 加密解密

#include #include #include #include void tEVP_Encrypt() { unsigned char key[EVP_MAX_KEY_LENG...

Java安全编程:DES加密解密

DES加密是最常用的对称加密算法之一。所谓“对称加密”指的就是从明文加密到密文和从密文解密到明文用的都是相同的一套密钥与之相对应的就是“非对称加密”。其它常见的对称加密算法还有IDEA、RC2、RC4...

Java安全编程:RSA加密解密

RSA是最常用非对称加密算法。常用于消息签名。它的加解密的密钥是成对出现的。使用私钥加密只能用对应的公钥才能解密。这样防止了类似DES等对称加密算法的密钥传输的问题。其加密效率比DES慢。 详细内容...

OpenSSL 编程 - RSA 加密解密

点击打开链接  http://blog.csdn.net/nadoo/article/details/2156384

信息安全排列码编程-加密解密

  • 2010年05月07日 21:41
  • 263KB
  • 下载

C#之AES256位加密解密

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分...

cocos2dx lua XXTEA来加密解密实现详解

cocos2dx lua已经集成了对lua脚本的加解密,见AppDelegate.cpp     LuaStack* stack = engine->getLuaStack();     s...

加密解密算法java实现(3)—RSA

加密解密算法java实现(1)—RSA

PHP通过OpenSSL生成证书、密钥并且加密解密数据

#生成证书密钥
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EVP加密解密编程
举报原因:
原因补充:

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