项目中需要用到就找了下,借鉴网上的一些代码,在加上自己的改良,得到了现在的代码,也解决了我的需求。
附openssl安装教程 https://blog.youkuaiyun.com/qq_39805297/article/details/100532833
先说下,3DES加密算法有几种填充方式,比如zeropadding、pkcs5padding、pkcs7padding等等,我使用的pkcs7padding的填充方式,比较普遍的算法,而且也是可以与java端契合的填充方式。
#pragma once
#include <iostream>
#include <string.h>
#include <openssl/des.h>
class C3DES
{
public:
/******************* 加密:strin是需要加密的明文,strkey是密钥 *********************/
static std::string encrypt(std::string strin, std::string strkey)
{
std::string ret;
int docontinue = 1;
const char *data = strin.c_str(); /* 明文 */
int data_len;
int data_rest;
unsigned char ch;
unsigned char *src = NULL; /* 补齐后的明文 */
unsigned char *dst = NULL; /* 加密后的明文 */
int len;
unsigned char tmp[8];
unsigned char in[8];
const char *k = strkey.c_str(); /* 原始密钥 */
int key_len;
#define LEN_OF_KEY 24
unsigned char key[LEN_OF_KEY]; /* 补齐后的密钥 */
unsigned char block_key[9];
DES_key_schedule ks, ks2, ks3;
/* 构造补齐后的密钥 密钥需要24位 不足24位的用0x00补齐*/
key_len = strlen(k);
memcpy(key, k, key_len);
memset(key + key_len, 0