【小沐学C++】C++ OpenSSL库编译及使用(VS2017,Python)
文章目录
- 1、简介
- 2、下载openssl
- 2.1 下载openssl源码(github)
- 2.2 下载openssl源码(官网压缩包)
- 2.3 下载openssl二进制库
- 2.4 下载perl工具
- 3、编译openssl
- 3.1 Perl
- 3.2 Microsoft Visual C 编译器
- 3.3 快速开始
- 4、使用openssl(C++)
- 4.1 配置开发环境
- 4.2 MD5实现
- 4.3 SHA256实现
- 5、使用openssl(命令行openssl.exe)
- 5.1 私钥公钥生成
- 5.2 自签名证书生成
- 5.3 加密文件
- 6、使用openssl(python)
- 7、个人测试
- 7.1 软件License许可证文件实现(C++)
- 7.2 批量加密图片文件(python)
- 7.3 图片Arnold置乱算法(python)
- 结语
1、简介
OpenSSL 是用于传输层安全 (TLS) 协议(以前称为安全套接字层 (SSL) 协议)的强大、商业级、功能齐全的开源工具包。协议实现基于全强度通用密码库,也可以单独使用。
- OpenSSL 源自 Eric A. Young 和 Tim J. Hudson 开发的 SSLeay 库。
- OpenSSL 项目的官方主页是www.openssl.org。
- OpenSSL(密码学和 SSL/TLS 工具包) 项目开发和维护 OpenSSL 软件——一个强大的、商业级的、功能齐全的工具包,用于通用加密和安全通信。
- OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得OpenSSL具有广泛的适用性。
SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
OpenSSL 工具包包括:
libssl: TLSv1.3 ( RFC 8446 ) 之前的所有 TLS 协议版本的实现。
libcrypto: 一个全强度的通用加密库。它构成了 TLS 实现的基础,但也可以独立使用。
openssl: OpenSSL 命令行工具,用于加密任务、测试和分析的瑞士军刀。它可用于
创建关键参数
创建 X.509 证书、CSR 和 CRL
消息摘要的计算
加密和解密
SSL/TLS 客户端和服务器测试
处理 S/MIME 签名或加密邮件
和更多…公钥和私钥:
非对称加密是用密钥对数据进行加密,然后我们可以使用另一个不同的密钥对数据进行解密。这两个密钥就是公钥和私钥。
每个用户都有一对公钥和私钥,私钥和公钥都拥有加密和解密功能。其中私钥可以进行签名,公钥可以进行验签。
私钥用来进行解密和签名,是给自己用的。
公钥由本人公开,用于加密和验证签名,是给别人用的。
当该用户发送文件时,用私钥签名,别人用他给的公钥解密,可以保证该信息是由他发送的。即数字签名。
当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他接收到。可以避免被其他人看到。
我们根据私钥可以计算出公钥,但是我们根据公钥计算不出来私钥的。私钥一般是有服务器掌握的,公钥则是在客户端使用的。数字签名:
它会将报文使用一定的HASH算法算出一个固定位数的摘要信息,然后使用私钥将摘要加密,然后会将刚才的报文一起发送给接收者,接收者会通过公钥将摘要解出来。也通过hash算法算出报文摘要,如果两个摘要一致,说明数据未被篡改,说明数据是完整的。数字证书:
(1)它是由CA颁发给网站的一种身份的方式。它里面包含了该网站的公钥、有效时间、网站的地址、及 CA的数字签名等。
(2)它是数字形式的标识。它是由证书颁发机构(CA)的权威机构颁发的,由该权威机构担保证书信息的有效性。因此数字证书只有在特定的时间段内有效。证书中包含了证书中所标识的公钥,也就是说证书里包含了你的公钥,公钥与你个人信息相匹配。
(3)它是使用CA的私钥将网站的公钥等信息进行了签名,当客户端请求服务器端的时候,网站会把证书发给客户端,客户端先通过CA的数字签名校验CA的身份,来证明证书的真实完整性。对于常见的https证书 一般是用crt或者pem来保存。
常见的X.509证书格式包括:
cer/crt是用于存放证书,它是2进制形式存放的,不含私钥。
pem跟crt/cer的区别是它以Ascii来表示,可以用于存放证书或私钥。
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式。
p10是证书请求。
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
2、下载openssl
2.1 下载openssl源码(github)
主源代码保存在git 存储库中,可通过网络访问并在 GitHub 上进行克隆,网址为https://github.com/openssl/openssl。
注意:最新的稳定版本是支持到 2026 年 9 月 7 日的 3.0 系列。这也是长期支持 (LTS) 版本。之前的 LTS 版本(1.1.1 系列)也可用,并且支持到 2023 年 9 月 11 日。所有旧版本(包括 1.1.0、1.0.2、1.0.0 和 0.9.8)现在都不再支持,应该不被使用。
- 从原始 OpenSSL 存储库克隆它来获得:
git clone git://git.openssl.org/openssl.git
- 或从 GitHub 镜像使用
git clone https://github.com/openssl/openssl.git
2.2 下载openssl源码(官网压缩包)
https://www.openssl.org/source/old/
直接在官网下载源码的压缩包,截图如下:
2.3 下载openssl二进制库
- (1)https://slproweb.com/products/Win32OpenSSL.html
- (2)https://slproweb.com/products/Win32OpenSSL.html
2.4 下载perl工具
(1)我们推荐 Strawberry Perl,可从http://strawberryperl.com/ 获得。有关更多信息,包括 CPAN 的使用,请阅读 NOTES.PERL。
(2)另一种方法是 ActiveState Perl,https
【小沐学C++】C++ OpenSSL库编译及使用(VS2017,Python)相关推荐
- 【小沐学Python】Python实现在线电子书(Sphinx + readthedocs + github + Markdown)
文章目录 1.简介 2.安装 3.创建测试工程 4.项目文件结构 5.编译为本地文件 6.编译为http服务 7.更改样式主题 8.支持markdown 9.修改文档显示结构 10.项目托管到gith ...
- 【小沐学C#】WPF中嵌入web网页控件(WebBrowser、WebView2、CefSharp)
文章目录 1.简介 1.1 WPF简介 1.2 WPF 体系结构 1.3 WPF入门开发 2.WebBrowser 2.1 WebBrowser特点 2.2 WebBrowser常用的属性.方法和事件 ...
- openssl库编译-及16进制的key转Rsa数据结构
1. linux 下编译 源码地址为:https://www.openssl.org/source/old/:当前最新版本为 1.1.0f,https://www.openssl.org/source ...
- 【小沐学python】(一)Python开发准备
<爱看书的小沐和爱发呆的戈戈>第一季 目录 1.<出生篇> 1.1 python历史背景 1.2 python职业方向 1.3 python语言排名 2.<巡山篇> ...
- 【小沐学Python】Python实现在线电子书(MkDocs + readthedocs + github + Markdown)
文章目录 1.简介 2.安装 3.创建新项目 4.添加页面 5.编辑导航页 6.设置主题 7.更改图标图标 8.构建网站 9.部署 9.1 准备github项目 9.2 注册登录Read the Do ...
- 【小沐学Unity3d】Unity3d导入3D模型
文章目录 1.简介 1.1 标准文件格式 1.2 专有文件格式 1.3 从 Autodesk® 3ds Max® 导入对象 1.4 从 Blender 导入对象 2.测试 2.1 新建项目 2.2 导 ...
- 【小沐学C++】C++11 实现随机数生成(Windows、Linux)
文章目录 1.简介 2.Windows随机数 2.1 随机数范围计算公式 2.2 rand() 2.3 srand() 2.4 c++11 <random> 2.4.1 随机数生成引擎 2 ...
- 【小沐学qt】生成二维码
目录 一.功能简介 二.本地生成二维码 1.第三方库Libqrencode 2.编写Qt程序代码,生成本地二维码 三.在线生成二维码 1.浏览器chrome 2.Google API 3.搜狐视频 A ...
- 【小沐学C++】C++17实现文件操作<filesystem>
文章目录 1.简介 1.1 C/C++标准种类 1.2 VS对C++标准的支持情况 1.3 gcc对C++标准的支持情况 2.头文件<filesystem>介绍 2.1 类(Classes ...
最新文章
- ASP.NET网站建设基本常用代码
- (转)I,P,B帧和PTS,DTS的关系
- 虚拟机实现二层交换机_局域网SDN技术硬核内幕 5 虚拟化网络的实现
- 【Android】Android开发初学者实现拨打电话的功能,拨打电话app小demo实现
- 数字图像处理特效中彩色墨水效果的设计与实现
- 编写python程序、创建名为class的数据库_Python中的元类(metaclass)以及元类实现单例模式...
- C语言中.和->区别
- 关于在Ubuntu系统中出现Could not get lock /var/lib/dpkg/lock解决方案
- go中make和new的用法,以及nil用法
- solr7在tomcat上的部署
- PDF Suite Pro(PDF全能工具箱电脑版)官方正式版V19.0.22 | 含ocr文字识别软件 | pdf全能工具箱怎么样?
- excel冻结行和列_excel如何冻结首行、首列、指定的行和列,这样看数据就方便多了...
- 【它山之玉】慎重选择博士后(或博士生)导师-科学网马臻
- 系统的入门脑机接口神经科学,一个网站就够了 - NeuroTechEDU
- 【每天学习一点新知识】菜刀、冰蝎、蚁剑、哥斯拉webshell工具分析
- kengoro机器人哪儿有卖_日本东京大学创造出“骨格精奇”的机器人Kengoro 会流汗能做掌上压...
- 8421BCD码 5421BCD码 余三码 格雷码 余三循环码之间的关系,转换以及简易方法
- 为什么pLC工程师如此年轻,他们的经验毫无价值?
- Cacheable、CacheEvict、Caching使用示例
- 湖泊遥感研究进展(概述)
热门文章
- 计算机社团英语宣传,社团宣传 | 计算机爱好者协会闪亮登场!
- 基于Vue3.0+Springboot在线购物商城网站设计
- KMeans算法实现步骤介绍及Python代码
- [Android] WebView中拍照或从相册上传图片
- CSS实现隐藏滚动条并保留滚动功能
- 为什么计算机当中要采用补码
- Rocket-Chip-Rom
- android 7.1优化,中兴天机7国行推送安卓7.1正式版系统:各种优化升级
- RK3399平台开发系列讲解(内核驱动外设篇)6.14、ES8323音频芯片驱动分析
- Mac技巧|如何管理Mac电脑菜单栏中的图标
- 【小沐学Python】Python实现在线电子书(Sphinx + readthedocs + github + Markdown)