Chinaunix首页 | 论坛 | 博客
  • 博客访问: 581046
  • 博文数量: 104
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1559
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-21 00:58
个人简介

锻炼精神,首先要锻炼肉体

文章分类

全部博文(104)

文章存档

2018年(1)

2016年(1)

2015年(101)

2014年(1)

我的朋友

分类: C/C++

2015-05-28 18:45:33

在这篇文章中简单介绍一下如何编译安装和使用第三方库 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
阅读(2485) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~