openssl常用的EVP_CIPHER值

openssl常用的EVP_CIPHER值

一. 加解密步骤

1. 创建结构体

EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);

2. 初始化结构体

void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);

3. 初始化上下文

int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
                   const unsigned char *key, const unsigned char *iv,
                   int enc);
int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
                      ENGINE *impl, const unsigned char *key,
                      const unsigned char *iv, int enc);
int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
                    const unsigned char *key, const unsigned char *iv);
int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
                       ENGINE *impl, const unsigned char *key,
                       const unsigned char *iv);
int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
                    const unsigned char *key, const unsigned char *iv);
int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
                       ENGINE *impl, const unsigned char *key,
                       const unsigned char *iv);

4. 更新(塞数据)

int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
                      const unsigned char *in, int inl);
int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
                      const unsigned char *in, int inl);
int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
                     const unsigned char *in, int inl);

其实可以全用EVP_CipherUpdate塞数据数据

int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
                     const unsigned char *in, int inl)
{
    if (ctx->encrypt)
        return EVP_EncryptUpdate(ctx, out, outl, in, inl);
    else
        return EVP_DecryptUpdate(ctx, out, outl, in, inl);
}

5. 最终(获得数据长度)

int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);

最终调用的是EVP_EncryptFinal_ex和EVP_DecryptFinal_ex两个函数

int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{
    if (ctx->encrypt)
        return EVP_EncryptFinal_ex(ctx, out, outl);
    else
        return EVP_DecryptFinal_ex(ctx, out, outl);
}
int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{
    if (ctx->encrypt)
        return EVP_EncryptFinal(ctx, out, outl);
    else
        return EVP_DecryptFinal(ctx, out, outl);
}
int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{
    int ret;
    ret = EVP_EncryptFinal_ex(ctx, out, outl);
    return ret;
}
int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
{
    int ret;
    ret = EVP_DecryptFinal_ex(ctx, out, outl);
    return ret;
}

6. 清理结构体

int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);

7. 释放结构体

void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);

二. EVP_CIPHER值

初始化结构体上下文时,第二个参数配置加解密方式。
int EVP_CipherInit
int EVP_CipherInit_ex
int EVP_EncryptInit
int EVP_EncryptInit_ex
int EVP_DecryptInit
int EVP_DecryptInit_ex

第二个参数是一个常量的EVP_CIPHER结构体,openssl准备了很多例程,下面是常见的例程

1. AES

AES_128

// AES128位密钥加密(加密模式:ecb,cbc,ctr,ofb,cfb)
EVP_aes_128_ecb()
EVP_aes_128_cbc()
EVP_aes_128_ctr()
EVP_aes_128_ofb()
EVP_aes_128_cfb()

AES_192

// AES192位密钥加密(加密模式:ecb,cbc,ctr,ofb,cfb)
EVP_aes_192_ecb()
EVP_aes_192_cbc()
EVP_aes_192_ctr()
EVP_aes_192_ofb()
EVP_aes_192_cfb()

AES_256

// AES256位密钥加密(加密模式:ecb,cbc,ctr,ofb,cfb)
EVP_aes_256_ecb()
EVP_aes_256_cbc()
EVP_aes_256_ctr()
EVP_aes_256_ofb()
EVP_aes_256_cfb()

2. DES

DES加密 (一次加密)

密钥长度64位,使用56位数据

// DES加密(加密模式:ecb,cbc,ofb,cfb)
EVP_des_ecb()
EVP_des_cbc()
EVP_aes_ofb()
EVP_des_cfb()

DES ede2 加密(两个密钥三重加密)

密钥长度128位,使用112位数据

//DES两个密钥三重加密(加密模式:ecb,cbc,ofb,cfb)
EVP_des_ede_ecb()
EVP_des_ede_cbc()
EVP_aes_ede_ofb()
EVP_des_ede_cfb()

DES ede3 加密(三个密钥三重加密)

密钥长度192位,使用168位数据

//DES三键三重加密(加密模式:ecb,cbc,ofb,cfb)
EVP_des_ede3_ecb()
EVP_des_ede3_cbc()
EVP_aes_ede3_ofb()
EVP_des_ede3_cfb()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值