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