在这篇文章中简单介绍一下如何编译安装和使用第三方库 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相关推荐

  1. rsa生成公私钥php,php中rsa生成公私钥和加解密

    php中rsa生成公私钥和加解密 注意:php使用RSA时需要开启openssl扩展 生成公私钥 //创建公私钥 $res = openssl_pkey_new(); //获取私钥 openssl_p ...

  2. 使用Openssl的RSA算法生成公私钥对

    openssl的安装参考这里:openssl的安装指导 非对称加密算法:RSA1024 /2048 /3072 /4096 在需要放置公私钥对所在的文件夹下,按住shift键点击右键,选择" ...

  3. PHP rsa私钥pkcs8加密,Openssl rsa私钥的PKCS#1和PKCS#8格式以及加密和转化

    这里主要介绍: 私钥的PKCS#1格式,及PKCS#8格式 格式PKCS#1和PKCS#8之间的互相转化 私钥的加密,解密 PKCS#1 -> PKCS#8 生成PKCS#1私钥 $ opens ...

  4. golang 使用RSA生成公私钥,加密,解密,并使用SHA256进行签名,验证

    话不多说直接上代码: package mainimport ("crypto""crypto/rand""crypto/rsa"" ...

  5. openssl 生成公私钥

    私钥 openssl genrsa -out rsa_private_key.pem 4096 同目录下 公钥 openssl rsa -in rsa_private_key.pem -pubout ...

  6. RSA生成公私钥并加解密

    1.RSA简介 RSA是目前使用最广泛的公钥密码体制之一,可以实现非对称加密.它是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leona ...

  7. linux调用qt生成静态库文件下载,Centos7下编译openssl静态库与QT引用

    1.下载openssl版本:https://www.openssl.org/source/old/ 下载地址 2.我们下载版本为:openssl-1.0.2k 3.拷贝到Linux服务器任意目录 4. ...

  8. linux巡检脚本生成word,windows、linux应急响应、安全巡检

    手动篇 0. 注意 最好提前获取客户操作系统等相关信息 千万不要一开始就使用一些扫描工具.因为有些工具可能带有打开文件操作,这样会导致所以文件的修改时间全被刷新一次. //别问我为啥知道 本文主要使用 ...

  9. android平台使用java动态生成公私钥,并导出证书文件

    不依赖keytool工具,指令生成证书库,而是java代码生成,且导出到证书文件中.直接上代码: 证书工具类: package com.daobo.security.utilsimport com.d ...

最新文章

  1. POJ - 1904 King's Quest 强连通tanjar思想
  2. Linux目录读写和可执行权限
  3. BP网络Python实现代码
  4. 网易数据基础平台建设经验谈
  5. rhel7 http实例3
  6. 网页编程中的模态对话框
  7. SAP Cloud for Customer Work Center(工作中心)的实现源代码
  8. python opencv3 轮廓检测
  9. NSBundle 的理解和 mainBundle
  10. [转]TensorFlow---岂止深度学习
  11. 安装redis 5.0.5版本 真香警告
  12. OpenCV4.5.1 | 使用一行代码将图像匹配性能提高14%
  13. 超级好用的TXT分本分割工具
  14. python 后台运行及关闭后台程序
  15. springmvc(2)处理器设配器和映射器
  16. 微信小程序 MinUI 组件库系列之 price 价格组件
  17. 网络平台运行计算机终端,Terminal是什么意思?Mac如何打开终端Terminal?
  18. BrowserSync 本地服务器的起用
  19. 基于FPGA的贪吃蛇游戏设计(1)整体架构设计
  20. Android简易实战教程--第五话《开发一键锁屏应用》

热门文章

  1. python3 判断list是否包含另一个list
  2. python3 import 和__import__() 的区别
  3. PHP中添加HTML代码的三种方法(printEND)
  4. WMI问题全解(Windows管理规范)
  5. Linux下ipconfig分析及C语言实现
  6. matlab dsearchn,cKDTree与dsearchn
  7. mysql57 修改root密码,MySQL 5.7.x修改root默认密码(CentOS下)
  8. api接口参数加密_解决API接口开发安全性的四种方案
  9. linux 脚本案例,30个关于Shell脚本的经典案例(上)
  10. php数字小数大小比较,PHP 常用的数学函数和数值处理函数