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. 图像降噪算法——小波硬阈值滤波(上)

    图像降噪算法--小波硬阈值滤波(上) 图像降噪算法--小波硬阈值滤波(上) 1. 多分辨率展开 2. 尺度函数 3. 小波函数 4. 小波级数展开 5. 离散小波变换 6. 快速小波变换 7. 图像小 ...

  2. 2021新年算法小专题—2.股票买卖利润(Java)

    概述 熟悉这类题目的同学都知道,事实上这是一类动态规划(dp)问题,在小专题中都暂且只针对这一类问题进行解决了,更全面的动态规划文章以后有机会再努力吧! 简单介绍一句动态规划.动态规划实际是一种分治思 ...

  3. 2021新年算法小专题—2.股票买卖利润刷题(Java)

    本篇是股票买卖问题的更多题解,在上一篇文章中我们已经介绍了这一题型,实际上是一类dp问题,我们用自动机的思想去解决,在上一篇中我们以一道限定只买卖一次股票的题目为例进行了讲解,文章链接.下面我们继续完 ...

  4. 送书 | 《趣学Python算法100例》

    又到了每周三的送书时刻啦!今天给大家带来的是<趣学Python算法100例>       (文末查看送书规则) 查看全文 http://www.taodudu.cc/news/show-4 ...

  5. 以FGSM算法为例的对抗训练的实现(基于Pytorch)

    如果可以,请点个赞,这是我写博客的动力,谢谢各位观众 1. 前言 深度学习虽然发展迅速,但是由于其线性的特性,受到了对抗样本的影响,很容易造成系统功能的失效. 以图像分类为例子,对抗样本很容易使得在测 ...

  6. 关于“labuladong的算法小抄”的学习笔记---第0章核心框架汇总的后半部分技巧(c++版)

    目录 前言 一.回溯算法秒杀所有排列/组合/子集问题 回溯和DFS之间区别---遍历树枝or遍历节点 1.子集(元素无重不可复选) 2.组合(元素无重不可复选) 3.排列(元素无重不可复选) 4.子集 ...

  7. c++用一级运算比较大小_以SM3算法为例,构建一个软硬协作算法加速器:设计面向SM3优化的运算结构...

    本文书接上文,来讨论如何具体地针对 SM3 算法的特点,优化计算架构,如通过 CSA 加法器来优化加法关键路径等方法,提升系统频率,提高系统吞吐性能. SM3 中的运算 在分析关键关键路径之前,首先分 ...

  8. 10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍...

    " 本篇文章采用10种常见的和不常见的混沌映射用于优化群智能算法,代码可一键切换,可用于所有智能算法优化,本篇文章以灰狼算法为例进行介绍" 本文涉及10种混沌映射算法,用于在初始化 ...

  9. 奇技淫巧-STL 库 ACM算法小技巧(持续更新中~~~)

    STL 库中的奇技淫巧 STL 是惠普实验室开发的一系列软件的统称,可以理解为一些容器的集合.STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件.STL 现在是C++的一部分,因此不用额 ...

最新文章

  1. python flask高级编程之restful_('Python Flask高级编程之RESTFul API前后端分离精讲',),全套视频教程学习资料通过百度云网盘下载...
  2. 工作中的感悟 (一)初来工作之感
  3. 基础知识《十》unchecked异常和checked异常
  4. mpvue小程序以及微信直播踩坑总结
  5. iOS:iOS开发系列–打造自己的“美图秀秀”(中)
  6. 计算机组成原理个人笔记(二)
  7. RHEL5-4的启动流程介绍
  8. 2019年开源安全现状调查报告发布
  9. 海龟交易法则10_通用积木
  10. Android中背景透明的Dialog
  11. php header readfile,采用header定义为文件然后readfile下载
  12. linux操作系统关闭防火墙,linux操作系统关闭防火墙的方法
  13. 联想台式计算机驱动程序,联想键盘驱动程序
  14. mysql 5.6 msvcr100_mysql 5.6.46 安装到winserver2012(x64) 遇到 MSVCR100.dll is missing
  15. java jersey_Java Jersey使用总结(转)
  16. php yaf twig,GitHub - cheerego/happy_yaf: 搭建一个可用的Yaf,包括Laravel的Eloquent ORM、Twig、脚手架、Whoops和使用用例...
  17. R语言自学笔记:回归分析基础
  18. Python获取用电情况数据-AHPU校园网
  19. 王继伟-国产UMLMDA工具开发实践-UMLChina讲座-音频和幻灯
  20. 菜鸟教程 | IDEA创建一个spring boot项目的详细过程

热门文章

  1. 机器学习工程师岗位面试经历之游戏行业
  2. 机器人操作系统ROS微信群, 欢迎加我微信: Jdrobots 技术相互学习交流(加我请备注ROS,谢谢!) 。
  3. MFC开发IM-第三篇、资源视图--显示在另一个编辑器中打开
  4. python变量赋值方式_python变量和变量赋值的几种形式
  5. 一个男生写的关于怎么追女生昨天没有说一个很关键的东西
  6. 北京冬奥会闭幕 冰墩墩概念股怎么样了?
  7. 利润暴增800%,单车成本降至22.7万元!特斯拉交出最强年报
  8. 双11首日全国共揽收快递包裹5.69亿件 同比增长28.54%
  9. 菜鸟启动“快递包装换鸡蛋”活动 史上最低碳的一届“双11”来了
  10. 上海一公司向苹果索赔100亿,要求停售iPhone