系列文章目录

C++ 开源密码库之OpenSSL的使用

文章目录

  • 系列文章目录
  • 前言
  • 一、openssl下载
  • 二、编译步骤
    • 1. 官网步骤
    • 2. 实战步骤
  • 三、 使用
    • 1.引入库
    • 2.代码实例
    • 3. 结果
  • 总结

前言

随着人们信息安全和软件产权的不断发展,加密技术也越来越重要,openssl作为一个功能丰富且开源的加密库,在应用开发中得到广泛的应用, 本文就openssl库下载、编译及C++项目使用进行记录和学习。

一、openssl下载

官网:https://www.openssl.org/
官网下载来的,需要自己手动编译,才能使用。

也可以根据需要下载已经编译好的win32(debug版)和win64版(release版)的软件库,直接使用,无需编译。下载链接如下:
x64版(relese):
链接:https://pan.baidu.com/s/1vM3-BWP8Yi6N5np16B8tHg
提取码:c43b
win32版(debug):
链接:https://pan.baidu.com/s/1Ho1jfOa5DgIatYRFYDWiXA
提取码:kbm9

二、编译步骤

需要下载nasm、perl、openssl以及vs环境。

1. 官网步骤

官网提供的步骤如下:https://github.com/openssl/openssl/blob/master/NOTES-WINDOWS.md

2. 实战步骤

下面,是以vs2013为例,在windows下编译x64版的openssl库步骤:

# 下载nasm
nasm-2.15.05-win64.zip
# 解压
nasm-2.15.05-win64
# 将解压的文件放入环境变量,在cmd的任意位置可以访问
C:\Soft\nasm-2.15.05-win64\nasm-2.15.05\
# 打开cmd,输入以下命令,没有报错,则说明安装成功
nasm# 下载perl
strawberry-perl-5.32.1.1-64bit.zip
# 解压
strawberry-perl-5.32.1.1-64bit
# 环境变量
C:\Soft\strawberry-perl-5.32.1.1-64bit\perl\bin\
# 打开cmd,输入以下命令,没有报错,则说明安装成功
perl -v# 下载openssl   Git Bash here打开Git输入以下命令
git clone https://github.com/openssl/openssl.git# 以命令行打开vs2013下的
VS2013 x64 本机工具命令提示
# 进入openssl目录
cd C:\Soft\openssl
# 在openssl根目录中执行,进行配置
perl Configure VC-WIN64A
# 编译
nmake           //比较耗时
# 测试
nmake test     //比较耗时
# 安装
nmake install

以上所有环节都成功完成之后,就可以在C盘的ProgramFiles文件夹下看到编译生成的OpenSSL库文件,目录结构如下:


说明:
bin目录下:为用到的dll库;
html目录下:为html格式的说明文档;
inlcude目录下:为用到的头文件;
lib目录下:为后面用到的lib库;

三、 使用

1.引入库

项目结构如下:

其中,
bin、include和lib目录为上文中openssl编译结果的三个文件,直接拷贝过来即可;
json目录为项目所用配置文件的路径;
src目录为项目源代码文件。

在vs2013中进行配置如下:
配置属性-》C/C+±》常规-》附加包含目录栏,写入openssl头文件所在路径:

配置属性-》C/C+±》链接器》附加库目录栏,写入openssl静态库文件(lib)所在路径:

将编译产生的可执行程序,放在bin目录(与openssl依赖的libcrypto-1_1.dll和libssl-1_1.dll库放在一起),即可执行。

2.代码实例

下面抽离出项目中,根据MAC地址生成md5序列,对软件进行加密部分为例,进行代码展示,代码如下:

#include<iostream>
#include <WinSock2.h>
#include "Iphlpapi.h"
#include<string>
#include "openssl/md5.h"using namespace std;
#pragma comment(lib,"Iphlpapi.lib")
#pragma comment(lib,"libcrypto.lib")
#pragma comment(lib,"libssl.lib")/*
输出32位长度
*/
string getMD5(const string & str)
{unsigned char md[16] = { 0 };MD5_CTX md5;MD5_Init(&md5);MD5_Update(&md5, str.c_str(), str.size());MD5_Final(md, &md5);char buf[33] = { 0 };char tmp[3] = { 0 };string st;  //结果for (auto i = 0; i < 6; i++){sprintf_s(tmp, "%02x", md[i]);   //转为u16进制strcat_s(buf, tmp);   //将tmp拼接到buf后}st = buf;//在字符串的第4个位置插入一个字符st.insert(4, "-");//在字符串的第8位置插入一个字符st.insert(8, "-");//删除最后一个字符st.erase(st.end() - 1);return st;
}//获取本机MAC地址
string GetMAC()
{byte mac[8] = { 0 };PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();unsigned long stSize = sizeof(IP_ADAPTER_INFO);int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);if (ERROR_BUFFER_OVERFLOW == nRel){delete pIpAdapterInfo;pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);}if (ERROR_SUCCESS == nRel){while (pIpAdapterInfo){memcpy(mac, pIpAdapterInfo->Address, 8);break;//获取到第一个网卡的MAC }}if (pIpAdapterInfo)delete pIpAdapterInfo;char buf[33] = { 0 };char tmp[4] = { 0 };string MAC;for (DWORD i = 0; i < 6; i++){sprintf_s(tmp, "%02x-", mac[i]);   //转为u16进制strcat_s(buf, tmp);                //将tmp拼接到buf后}MAC = buf;MAC = MAC.erase(MAC.size() - 1);     //去除最后一个“-”return MAC;
}int main()
{cout << "MAC地址加密:" << getMD5(GetMAC()) << endl;system("pause");return 0;
}

3. 结果

总结

openssl库编译比较麻烦,建议直接下载我已经编译好的库,进行使用,方便简单。

C++ 开源密码库之OpenSSL的使用相关推荐

  1. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )

    文章目录 一.项目中配置 OpenSSL 开源库 二.OpenSSL 开源库解密参考代码 三.解密 dex 文件的 Java 代码 四.解密 dex 文件的 Jni 代码 参考博客 : [Androi ...

  2. liboqs-量子安全密码算法开源C库

    liboqs是一个用于量子安全密码算法的开源C库. 一,概述 liboqs提供: 量子安全 密钥封装机制(KEM)和数字签名算法的开源实现的集合: 这些算法的通用API: 测试工具和基准测试例程. l ...

  3. 如何通过 Docker 快速部署开源密码管理器 Bitwarden

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 前言 两年前,我就想自托管 Bitwarden 密码管理器了,但是直到 2022 年快结束的现在,我才真正动手.在 ...

  4. Linux下常用的C/C++开源Socket库

    1.      Linux Socket Programming In C++ : http://tldp.org/LDP/LG/issue74/tougher.html 2.      ACE: h ...

  5. 一款超好用的开源密码管理器?

    程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store DevWeekly收集整理每周优质开发者内容,包括开源项目.资源工具.技术文章等方面. 每周 ...

  6. 常用开源服务器库和中间件

    常用开源服务器库: •asio.•libevent..libev.•muduo .gevent .libuv.Java Netty.Chaos - 开源的c++网络事件库.zeromq arioTCP ...

  7. 开源密码管理器更安全吗?(2)

    密码管理器怎样保护我们的密码? 加密原理 密码学历史悠久,常用于古代军事通信. 3000年前姜子牙就发明了阴符,2000年前罗马帝国诞生了广泛使用的凯撒密码.这些都称为古典密码,通常使用替换法或者移位 ...

  8. vaultwarden密码库 搭建流程

    系统工程 - 建设篇 第二章 vaultwarden密码库 搭建流程 系统工程 - 建设篇 系列文章回顾 前言 前置条件 实施步骤 注意事项 浏览器插件下载链接 部署 vaultwarden密码库 宝 ...

  9. Padloc:一个直观的开源密码管理器

    让我们了解一下这个具有令人愉悦的用户界面.跨平台可用的开源密码管理器. 有大量适用于个人和团队的免费的和收费的密码管理器. 然而,当谈到开源方案时,它通常仅限于几个好的方案,如 Seahorse.Ke ...

  10. 开源密码管理器 KeeWeb

    开源密码管理器 KeeWeb 在互联网上有许多不同种类的密码管理器可供选择.作者之前使用的是1Password 6系列,因为7版本之后的不符合个人的使用习惯.后来尝试过LastPass,但感觉还是不如 ...

最新文章

  1. DPDK 大页内存实现(二十二)
  2. 图元变形lisp源码_AutoLISP入门6---图元资料的取得与活用技巧(一).pdf
  3. FFmpeg编译找不到库文件
  4. asp.net 中textbox如何自动换行
  5. mount 安卓system只读_Android如何让system分区可读写(MTK安卓6.0)-阿里云开发者社区...
  6. [转载] 字符串操作截取后面的字符串_对字符串的5个必知的熊猫操作
  7. 【debug】requests.exceptions.ChunkedEncodingError: (‘Connection broken: IncompleteRead(0 bytes read)‘
  8. 设计模式之--单例模式
  9. 五个案例“熄灭”Nginx漏洞隐患
  10. Windows最常用的几个网络CMD命令总结
  11. teamtalk实现即时通讯
  12. vivo安装android wear,vivo谷歌框架下载-vivo谷歌服务框架v4.1.2 安卓版 - 极光下载站...
  13. html5演讲ppt,制作ppt太麻烦?用上这5款黑科技PPT模板,汇报、演讲瞬间高大上
  14. 什么是 DNS,有什么作用?为什么需要更换公共DNS服务器?
  15. 【Nodejs】用http模块写一个简单的web服务器
  16. BZOJ5442 [Ceoi2018]Global warming
  17. 【语义网】Jena框架简介及实战
  18. 基于伽马变换自适应修正的全景首尾融合算法
  19. 1905 杨辉三角
  20. 【PIL案例精讲】252行Python代码制作透明背景的电子印章

热门文章

  1. IAQI的计算工具类,根据空气检测浓度值计算IAQI值和空气质量等级(pm2.5,pm10,so2,no2,co,o3)
  2. 基于networkx的《人民的名义》人物关系图
  3. Directive 详解
  4. Building Maintainable Software-java篇之Separate Concerns in Modules
  5. 【Linux / 数据库】项目实战:tpshop项目在Linux系统环境搭建
  6. RTF转换为HTML格式(java)
  7. 利用wordcloud和jieba制作词云
  8. 从偏差和方差的角度解释bagging和boosting的原理
  9. mysql mgr recovering_mysql group replication recovering 怎么调整为 online
  10. springboot-mybatis集成 使用逆向工程