IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> openssl 基本算法小例 -> 正文阅读

[网络协议]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字节

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2022-03-17 22:35:21  更:2022-03-17 22:37:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:57:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码