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