Chinaunix首页 | 论坛 | 博客
  • 博客访问: 437309
  • 博文数量: 58
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 623
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-26 18:48
个人简介

在生存面前,那纯洁的理想,原来是那么脆弱不堪!

文章分类

全部博文(58)

文章存档

2022年(1)

2021年(1)

2019年(3)

2018年(6)

2017年(6)

2016年(14)

2015年(10)

2014年(16)

2013年(1)

我的朋友

分类: 网络与安全

2016-01-27 22:01:00

     这里我们对大名鼎鼎的RSA非对称加密算法进行演算,本文不会讲解具体的算法,只是使用Openssl工具对算法进行验算。上文中我们加密文件使用的对称加密算法,通俗的表现就是加密时填入密码,解密时被要求输入相同密码。而RSA非对称加密算法的特点就是加密和加密使用不同的密钥,即客户端使用公开的公钥加密,服务端使用自己未公开的私钥进行解密。一定程度保证数据传输的安全性。

1,首先生成密钥
  1. 先生成私钥
  2. openssl genrsa -out private.key 1024
  3. 生成加密的私钥:
  4. openssl genrsa -des -out privkey.key
  5. 以后每次使用私钥都要使用密码。
  1. 根据私钥,生成公钥:
  2. openssl rsa -in private.key -pubout -out pub.key
    这样我们就生成了对应的私钥文件和公钥文件。

2,使用密钥对,进行加密和解密
    文中的text.txt是测试文件,可以使用任意的文本文件进行测试
  1. 使用公钥pub.key对text.txt文件加密。
  2. openssl rsautl -encrypt -pubin -inkey pub.key -in text.txt -out text.rsaenc
  1. 使用私钥private.key对加密文件进行解密。
  2. openssl rsautl -decrypt -inkey private.key -in text.rsaenc -out text.rsadeenc
  1. 比较原文件和解密后文件,显示完全相同。
  2. [root@localhost openssl]# diff text.rsadeenc text.txt
  3. [root@localhost openssl]#
    在整个过程中,我们使用公钥pub.key对text.txt文件加密,使用私钥private.key对加密文件进行解密,文件准确无误。利用这种机制,只要私钥不泄漏,就可以保证传输过程中的安全性。

3,使用密钥对,进行签名验证
   
RSA数字签名和验证的过程正好和加密解密相反,服务端使用未公开的私钥对重要消息进行加密,客户端使用公钥对消息解密。
    message是一个简短的文本文件,这里要求小文件,后文解释。
  1. 对message进行私钥加密
  2. openssl rsautl -sign -inkey private.key -in message -out message.sign
  1. 对加密的message进行公钥解密
  2. openssl rsautl -verify -pubin -inkey pub.key -in message.sign -out message.verify
    在这里可能会感觉,签名过程和加解密过程只是计算方向的不同,没什么区别,其实不然:因为使用私钥加密,公钥解密的速度会大大降低。
    实际应用中,签名的消息一般是一个完整数据的散列值,用私钥加密后,保证这个散列值不能被伪造(因为私钥未公开),这样客户端接收到数据后,对数据求散列值,然后和解密出来的散列值进行比对,这样就验证了数据的有效性,整个过程中,必要的一个环节,就是用私钥进行加密,相当于作了一次独一无二的签名。



     



阅读(1570) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~