openssl 加密

关于openssl中的加密
openssl提供了8种对称秘钥,其他的也不太熟悉,今天用到的是des-ecb这种加密算法,
ecb是一种加密模式,此外还有cbc,cfb,ofb。是4种常见的加密模式。

openssl加密指令语法:
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e]
[-d] [-a] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-p]
[-P] [-bufsize number] [-nopad] [-debug]

解释:
-chipername选项:加密算法
-in选项:输入文件
-out选项:输出文件
-pass选项:选择输入口令的方式
-e选项:实现加密功能
-d选项:实现解密功能(没用-d时会默认是加密)
-a和-A选项:对文件进行BASE64编解码
-K选项:手动输入加密密钥
-IV选项:输入初始变量
-salt选项:是否使用盐值,默认是使用的
-p选项:打印出加密算法使用的加密密钥

实例:
加密:openssl  enc -aes-128-cbc  in_file  out_file -pass pass:111111
解密:openssl  enc -d -aes-128-cbc  out_file  tmp_file  -pass pass:111111

#include <string.h>
#include <openssl/ossl_typ.h>
#include <openssl/des.h>

#define MAX_LEN    512
using namespace std;

int des_encrypt(char* in_buf, int in_len, char* out_buf)
{         
    int data_rest = in_len % 8;
    int group_cnt = in_len/8;
    char orgin_buf[in_len + 8];
    memset(orgin_buf, 0, in_len + 8);         
    memcpy(orgin_buf, in_buf, in_len); 
    memset(orgin_buf + in_len, '0', 8 - data_rest);  
    group_cnt += 1;   
    DES_key_schedule key_1;
    DES_key_schedule key_2;
    DES_key_schedule key_3;
   
    DES_set_key((DES_cblock *)file_cnt, &des_key_1);
    DES_set_key((DES_cblock *)(file_cnt + 8), &des_key_2);
    DES_set_key((DES_cblock *)(file_cnt + 16), &des_key_3);
       
    // 8 byte为一个分组进行加密
    for (int i = 0; i< group_cnt; i++)
    {
        DES_ecb3_encrypt((DES_cblock *)(orgin_buf + (i*8)),
            (DES_cblock *)(out_buf + (i*8) ),
            &key_1, &key_2,
            &key_3,  DES_ENCRYPT);
    }
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值