这里我们对大名鼎鼎的RSA非对称加密算法进行演算,本文不会讲解具体的算法,只是使用Openssl工具对算法进行验算。上文中我们加密文件使用的对称加密算法,通俗的表现就是加密时填入密码,解密时被要求输入相同密码。而RSA非对称加密算法的特点就是加密和加密使用不同的密钥,即客户端使用公开的公钥加密,服务端使用自己未公开的私钥进行解密。一定程度保证数据传输的安全性。
1,首先生成密钥
-
先生成私钥 :
-
openssl genrsa -out private.key 1024
-
或 生成加密的私钥:
-
openssl genrsa -des -out privkey.key
-
以后每次使用私钥都要使用密码。
-
根据私钥,生成公钥:
-
openssl rsa -in private.key -pubout -out pub.key
这样我们就生成了对应的私钥文件和公钥文件。
2,使用密钥对,进行加密和解密
文中的text.txt是测试文件,可以使用任意的文本文件进行测试。
-
使用公钥pub.key对text.txt文件加密。
-
openssl rsautl -encrypt -pubin -inkey pub.key -in text.txt -out text.rsaenc
-
使用私钥private.key对加密文件进行解密。
-
openssl rsautl -decrypt -inkey private.key -in text.rsaenc -out text.rsadeenc
-
比较原文件和解密后文件,显示完全相同。
-
[root@localhost openssl]# diff text.rsadeenc text.txt
-
[root@localhost openssl]#
在整个过程中,我们使用公钥pub.key对text.txt文件加密,使用私钥private.key对加密文件进行解密,文件准确无误。利用这种机制,只要私钥不泄漏,就可以保证传输过程中的安全性。
3,使用密钥对,进行签名验证
RSA数字签名和验证的过程正好和加密解密相反,服务端使用未公开的私钥对重要消息进行加密,客户端使用公钥对消息解密。
message是一个简短的文本文件,这里要求小文件,后文解释。
-
对message进行私钥加密
-
openssl rsautl -sign -inkey private.key -in message -out message.sign
-
对加密的message进行公钥解密
-
openssl rsautl -verify -pubin -inkey pub.key -in message.sign -out message.verify
在这里可能会感觉,签名过程和加解密过程只是计算方向的不同,没什么区别,其实不然:因为使用私钥加密,公钥解密的速度会大大降低。
实际应用中,签名的消息一般是一个完整数据的散列值,用私钥加密后,保证这个散列值不能被伪造(因为私钥未公开),这样客户端接收到数据后,对数据求散列值,然后和解密出来的散列值进行比对,这样就验证了数据的有效性,整个过程中,必要的一个环节,就是用私钥进行加密,相当于作了一次独一无二的签名。
阅读(1570) | 评论(0) | 转发(0) |