openssl 基本算法小例
openssl
openssl支持各种算法,在网络传输中我们需要用到各类算法,尤其是在安全协议里面,hmac算法是必须要用得,dtls协议里面也会用到各类对称算法,下面定义一个类,使用openssl得常用算法中得基本算法。
#pragma once#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
class c_hmac
{string v_key;string v_data;string v_name;public:c_hmac(string alo_name,string key, string data){v_key = key;v_data = data;v_name = alo_name;}uint8_t * hmac_algo(unsigned int &len);};
实现
实现比较简单,版本使用openssl 1.1.1 版
#include "hmac.h"
#include <openssl/hmac.h>
#include <string.h>
#include <iostream>#pragma comment(lib,"libcrypto.lib")
using namespace std;
#define strcasecmp _stricmp
uint8_t * c_hmac::hmac_algo(unsigned int &len) {const EVP_MD * engine = NULL;const char *name = v_name.c_str();if (strcasecmp("sha512", name) == 0) {engine = EVP_sha512();}else if (strcasecmp("sha256", name) == 0) {engine = EVP_sha256();}else if (strcasecmp("sha1", name) == 0) {engine = EVP_sha1();}else if (strcasecmp("md5", name) == 0) {engine = EVP_md5();}else if (strcasecmp("sha224", name) == 0) {engine = EVP_sha224();}else if (strcasecmp("sha384", name) == 0) {engine = EVP_sha384();}else {cout << "Algorithm " << name << " is not supported now!" << endl;return NULL;}uint8_t *output = (uint8_t *)malloc(EVP_MAX_MD_SIZE);HMAC_CTX *hctx = HMAC_CTX_new();HMAC_CTX_reset(hctx);HMAC_Init_ex(hctx, v_key.c_str(), v_key.size(), engine, NULL);HMAC_Update(hctx, (uint8_t *)v_data.c_str(), v_data.size()); // input is OK; &input is WRONG !!!HMAC_Final(hctx, output, &len);//HMAC_CTX_cleanup(&ctx);HMAC_CTX_free(hctx);return output;
}
调用
调用分别是密码方法名称,我们使用sha256,关键密字和需要加密得数据,调用如下
#include "hmac.h"
using namespace std;int main(int argc, char * argv[])
{c_hmac hmac("sha256","qianbo", "this is a test");unsigned int len = 0;uint8_t *ret = hmac.hmac_algo(len);if (NULL == ret) {cout << "Algorithm fail!" << endl;}for (unsigned int i = 0; i < len; i++) {printf("%02x-", (unsigned int)ret[i]);}cout << endl;if (ret) {free(ret);}return 0;
}
结果
计算得结果如图所示,结果为32字节
openssl 基本算法小例相关推荐
- 图像降噪算法——小波硬阈值滤波(上)
图像降噪算法--小波硬阈值滤波(上) 图像降噪算法--小波硬阈值滤波(上) 1. 多分辨率展开 2. 尺度函数 3. 小波函数 4. 小波级数展开 5. 离散小波变换 6. 快速小波变换 7. 图像小 ...
- 2021新年算法小专题—2.股票买卖利润(Java)
概述 熟悉这类题目的同学都知道,事实上这是一类动态规划(dp)问题,在小专题中都暂且只针对这一类问题进行解决了,更全面的动态规划文章以后有机会再努力吧! 简单介绍一句动态规划.动态规划实际是一种分治思 ...
- 2021新年算法小专题—2.股票买卖利润刷题(Java)
本篇是股票买卖问题的更多题解,在上一篇文章中我们已经介绍了这一题型,实际上是一类dp问题,我们用自动机的思想去解决,在上一篇中我们以一道限定只买卖一次股票的题目为例进行了讲解,文章链接.下面我们继续完 ...
- 送书 | 《趣学Python算法100例》
又到了每周三的送书时刻啦!今天给大家带来的是<趣学Python算法100例> (文末查看送书规则) 查看全文 http://www.taodudu.cc/news/show-4 ...
- 以FGSM算法为例的对抗训练的实现(基于Pytorch)
如果可以,请点个赞,这是我写博客的动力,谢谢各位观众 1. 前言 深度学习虽然发展迅速,但是由于其线性的特性,受到了对抗样本的影响,很容易造成系统功能的失效. 以图像分类为例子,对抗样本很容易使得在测 ...
- 关于“labuladong的算法小抄”的学习笔记---第0章核心框架汇总的后半部分技巧(c++版)
目录 前言 一.回溯算法秒杀所有排列/组合/子集问题 回溯和DFS之间区别---遍历树枝or遍历节点 1.子集(元素无重不可复选) 2.组合(元素无重不可复选) 3.排列(元素无重不可复选) 4.子集 ...
- c++用一级运算比较大小_以SM3算法为例,构建一个软硬协作算法加速器:设计面向SM3优化的运算结构...
本文书接上文,来讨论如何具体地针对 SM3 算法的特点,优化计算架构,如通过 CSA 加法器来优化加法关键路径等方法,提升系统频率,提高系统吞吐性能. SM3 中的运算 在分析关键关键路径之前,首先分 ...
- 10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍...
" 本篇文章采用10种常见的和不常见的混沌映射用于优化群智能算法,代码可一键切换,可用于所有智能算法优化,本篇文章以灰狼算法为例进行介绍" 本文涉及10种混沌映射算法,用于在初始化 ...
- 奇技淫巧-STL 库 ACM算法小技巧(持续更新中~~~)
STL 库中的奇技淫巧 STL 是惠普实验室开发的一系列软件的统称,可以理解为一些容器的集合.STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件.STL 现在是C++的一部分,因此不用额 ...
最新文章
- python flask高级编程之restful_('Python Flask高级编程之RESTFul API前后端分离精讲',),全套视频教程学习资料通过百度云网盘下载...
- 工作中的感悟 (一)初来工作之感
- 基础知识《十》unchecked异常和checked异常
- mpvue小程序以及微信直播踩坑总结
- iOS:iOS开发系列–打造自己的“美图秀秀”(中)
- 计算机组成原理个人笔记(二)
- RHEL5-4的启动流程介绍
- 2019年开源安全现状调查报告发布
- 海龟交易法则10_通用积木
- Android中背景透明的Dialog
- php header readfile,采用header定义为文件然后readfile下载
- linux操作系统关闭防火墙,linux操作系统关闭防火墙的方法
- 联想台式计算机驱动程序,联想键盘驱动程序
- mysql 5.6 msvcr100_mysql 5.6.46 安装到winserver2012(x64) 遇到 MSVCR100.dll is missing
- java jersey_Java Jersey使用总结(转)
- php yaf twig,GitHub - cheerego/happy_yaf: 搭建一个可用的Yaf,包括Laravel的Eloquent ORM、Twig、脚手架、Whoops和使用用例...
- R语言自学笔记:回归分析基础
- Python获取用电情况数据-AHPU校园网
- 王继伟-国产UMLMDA工具开发实践-UMLChina讲座-音频和幻灯
- 菜鸟教程 | IDEA创建一个spring boot项目的详细过程
热门文章
- 机器学习工程师岗位面试经历之游戏行业
- 机器人操作系统ROS微信群, 欢迎加我微信: Jdrobots 技术相互学习交流(加我请备注ROS,谢谢!) 。
- MFC开发IM-第三篇、资源视图--显示在另一个编辑器中打开
- python变量赋值方式_python变量和变量赋值的几种形式
- 一个男生写的关于怎么追女生昨天没有说一个很关键的东西
- 北京冬奥会闭幕 冰墩墩概念股怎么样了?
- 利润暴增800%,单车成本降至22.7万元!特斯拉交出最强年报
- 双11首日全国共揽收快递包裹5.69亿件 同比增长28.54%
- 菜鸟启动“快递包装换鸡蛋”活动 史上最低碳的一届“双11”来了
- 上海一公司向苹果索赔100亿,要求停售iPhone