openssl加密套件
openssl,众所周知用于对socket通信过程添加ssl支持,曾强安全性
实际上还可以使用里面丰富的加解密算法,对数据进行加解密。
从编译安装开始
从github 选择所需要的版本
而后编译安装
# 依赖
yum install g++ tcl
# 解压后,安装
./config --prefix=/path
make
make install_sw
# 查看信息
openssl version
到加解密结束
经典类型是散列、加解密两个大类。
散列
最出名的md5,而国内要求大抵为SM3
使用命令openssl list -digest-algorithms
查看当前部署的版本支持的算法。
使用方法
const EVP_MD *pMD;
EVP_MD_CTX *pCtx;
// 指定算法
pMD = EVP_sm3();
pCtx = EVP_MD_CTX_new();
// 初始化加密上下文
EVP_DigestInit_ex(pCtx, pMD, NULL);
// 添加数据, 可以反复添加数据,比如加盐就是这里加一个update,把盐值传进去。最终结果长度一致。
EVP_DigestUpdate(pCtx, data, datelen);
// 提取数据
EVP_DigestFinal_ex(pCtx, result, &resLen);
EVP_MD_CTX_free(pCtx);
加解密
出名的如(非对称)rsa, (对称)aes, SM4等。国内指定SM4较为合适,对称,快速。
命令openssl list -cipher-algorithms
查看支持的加解密算法。
加密:
const EVP_CIPHER *pCipher;
EVP_CIPHER_CTX *pCtx;
// 指定算法
pCipher = EVP_sm4_cbc();
pCtx = EVP_CIPHER_CTX_new();
// 初始化加密上下文
EVP_EncryptInit_ex(pCtx, pCipher, NULL, "key", NULL);
// 添加数据
EVP_EncryptUpdate(pCtx, data, &datelen, oriData, oriDatalen);
resLen = datalen;
// 提取数据
EVP_EncryptFinal_ex(pCtx, data + datelen, &datelen);
EVP_CIPHER_CTX_free(pCtx);
resLen += dataLen;
解密:
const EVP_CIPHER *pCipher;
EVP_CIPHER_CTX *pCtx;
// 指定算法
pCipher = EVP_sm4_cbc();
pCtx = EVP_CIPHER_CTX_new();
// 初始化加密上下文
EVP_DecryptInit_ex(pCtx, pCipher, NULL, "key", NULL);
// 添加数据
EVP_DecryptUpdate(pCtx, data, &datelen, oriData, oriDatalen);
resLen = datalen;
// 提取数据
EVP_DecryptFinal_ex(pCtx, data + datelen, &datelen);
EVP_CIPHER_CTX_free(pCtx);
resLen += dataLen;