linux 公私钥生成,[c++,openssl,RSA] linux下编程实现生成公私钥对_1
在这篇文章中简单介绍一下如何编译安装和使用第三方库 OpenSSL ,并在 OpenSSL 提供的 API 的基础上生成存放 RSA 类型的公密钥对的文件。
什么是密钥 ?
密钥根据加密密钥和解密密钥是否相同而分为两种类型:
对称的和非对称的
对称的密钥:加密、解密都是用这个密钥
非对称密钥:该密钥是成对出现的,由 公钥和私钥 两部分组成的,本文将要介绍的 RSA 密钥属于非对称密钥
简单的说, 使用私钥加密的对象,使用公钥可以将其进行解密
反之, 使用公钥加密的对象,使用私钥可以将其进行解密
私钥只有生成密钥对的用户才能拥有
举例说明非对称密钥的使用方法:
将其设定为 pri_key , pub_key
私钥 pri_key 由生成密钥对的用户自己留存,在这里可以设生成密钥对的用户为 User_x ;
公钥 pri_key 由生成密钥对的用户(User_x ) 自己留存一份的同时,也会将其分发给其他允许与他交互的其他用户,
设留存 User_x 公钥 pub_key 的用户为 User_1 , User_2
//------------------------------------------------------------------------------------------------------------------------------------
情景 1 :
如果 User_x 想要向 User_1 , User_2 发送需要向其他人员保密的消息 plain_message,
User_x 首先通过自己的 私钥(pri_key) 对消息 plain_message 进行加密,加密之后 :
by pri_key
{User_x } plain_message ----------------> coded_message
coded_message 被 User_1, User_2 , User_3 , User_4 , User_5 所接收到了,
但是,根据我们的设定,只有 User_1 User_2 有用于解密消息的 pub_key ,
所以 User_1 , User_2 便使用 pub_key 对 coded_message 进行解密 ,
by pub_key
{User_1 , User_2}coded_message ------------------ > plain_message
这样 User_1 , User_2 便可以获取 User_x 发送过来的消息了, 并且 User_1 User_2 不仅可以获知该消息的内容,
而且还可以知道该消息是来自于 User_x . 因为,如果该消息不是来自 User_x 的话, 使用 User_x 的 pub_key 是无法将其正确解密的.
对于 User_3,4,5 来说,他们既不知道该消息来自于 User_x 更不知道使用什么来对消息进行解密
这个是一种情况,即 User_x {pri_key 加密} === > User_1 , User_2 {pub_key 解密}
//-------------------------------------------------------------------------------------------------------------------------------------
情景 2 :
User_1 , User_2 === > User_x 这种情况可以理解如下:
User_1 ,2 已经拥有了 User_x 的公钥了即 pub_key, 那么 User_1 , User_2 向 User_x 发送消息 plain_message1 , plain_messag2 的时候
使用 pub_key 对 plain_message1 , plain_message2 进行加密,---> coded_message1 , coded_message2
{User_1} plain_message1 ------------------by pub_key ------------------------> coded_message1
{User_2} plain_message2 -------------------by pub key ------------------------> coded_message2
待到 User_x 接收到 coded_message1 , coded_message2 之后, 使用自己的 pri_key 试着对该 coded_message1,2 进行解密,
如果能够正确解开的话,便说明该消息是从自己授权(发送公钥)的 User 发送过来的。
{User_x} {coded_message1| coded_message2} ------------------- by pri_key ---------------------> {plain_message1 , plain_message_2}
这种情况是 {User_1 | User_2}{pub_key 加密} =======> User_x (pri_key 解密)
可能你会问: 如何判断消息是所谓的 “可以被正确的解开?”
我们都知道,网络中的消息是成一定规格的,前多少个字节代表的含义是什么,后几个字节代表的含义是什么都其固定的格式,
不同的消息判定标准不同,这个和具体的程序有关。
有很多设计是消息的头部多少个字节对应的是一个 sha1签名用于校验消息是否正确的,所以消息正确性的判定无需担心。
to be continued
linux 公私钥生成,[c++,openssl,RSA] linux下编程实现生成公私钥对_1相关推荐
- rsa生成公私钥php,php中rsa生成公私钥和加解密
php中rsa生成公私钥和加解密 注意:php使用RSA时需要开启openssl扩展 生成公私钥 //创建公私钥 $res = openssl_pkey_new(); //获取私钥 openssl_p ...
- 使用Openssl的RSA算法生成公私钥对
openssl的安装参考这里:openssl的安装指导 非对称加密算法:RSA1024 /2048 /3072 /4096 在需要放置公私钥对所在的文件夹下,按住shift键点击右键,选择" ...
- PHP rsa私钥pkcs8加密,Openssl rsa私钥的PKCS#1和PKCS#8格式以及加密和转化
这里主要介绍: 私钥的PKCS#1格式,及PKCS#8格式 格式PKCS#1和PKCS#8之间的互相转化 私钥的加密,解密 PKCS#1 -> PKCS#8 生成PKCS#1私钥 $ opens ...
- golang 使用RSA生成公私钥,加密,解密,并使用SHA256进行签名,验证
话不多说直接上代码: package mainimport ("crypto""crypto/rand""crypto/rsa"" ...
- openssl 生成公私钥
私钥 openssl genrsa -out rsa_private_key.pem 4096 同目录下 公钥 openssl rsa -in rsa_private_key.pem -pubout ...
- RSA生成公私钥并加解密
1.RSA简介 RSA是目前使用最广泛的公钥密码体制之一,可以实现非对称加密.它是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leona ...
- linux调用qt生成静态库文件下载,Centos7下编译openssl静态库与QT引用
1.下载openssl版本:https://www.openssl.org/source/old/ 下载地址 2.我们下载版本为:openssl-1.0.2k 3.拷贝到Linux服务器任意目录 4. ...
- linux巡检脚本生成word,windows、linux应急响应、安全巡检
手动篇 0. 注意 最好提前获取客户操作系统等相关信息 千万不要一开始就使用一些扫描工具.因为有些工具可能带有打开文件操作,这样会导致所以文件的修改时间全被刷新一次. //别问我为啥知道 本文主要使用 ...
- android平台使用java动态生成公私钥,并导出证书文件
不依赖keytool工具,指令生成证书库,而是java代码生成,且导出到证书文件中.直接上代码: 证书工具类: package com.daobo.security.utilsimport com.d ...
最新文章
- POJ - 1904 King's Quest 强连通tanjar思想
- Linux目录读写和可执行权限
- BP网络Python实现代码
- 网易数据基础平台建设经验谈
- rhel7 http实例3
- 网页编程中的模态对话框
- SAP Cloud for Customer Work Center(工作中心)的实现源代码
- python opencv3 轮廓检测
- NSBundle 的理解和 mainBundle
- [转]TensorFlow---岂止深度学习
- 安装redis 5.0.5版本 真香警告
- OpenCV4.5.1 | 使用一行代码将图像匹配性能提高14%
- 超级好用的TXT分本分割工具
- python 后台运行及关闭后台程序
- springmvc(2)处理器设配器和映射器
- 微信小程序 MinUI 组件库系列之 price 价格组件
- 网络平台运行计算机终端,Terminal是什么意思?Mac如何打开终端Terminal?
- BrowserSync 本地服务器的起用
- 基于FPGA的贪吃蛇游戏设计(1)整体架构设计
- Android简易实战教程--第五话《开发一键锁屏应用》
热门文章
- python3 判断list是否包含另一个list
- python3 import 和__import__() 的区别
- PHP中添加HTML代码的三种方法(printEND)
- WMI问题全解(Windows管理规范)
- Linux下ipconfig分析及C语言实现
- matlab dsearchn,cKDTree与dsearchn
- mysql57 修改root密码,MySQL 5.7.x修改root默认密码(CentOS下)
- api接口参数加密_解决API接口开发安全性的四种方案
- linux 脚本案例,30个关于Shell脚本的经典案例(上)
- php数字小数大小比较,PHP 常用的数学函数和数值处理函数