RSA加密与签名

RSA是一个非对称加密算法。
简单说来,非对称加密算法就是说加密解密一个文件需要有两个密钥,
一个用来加密,为公钥,一个用来解密,为私钥。
证书可以用来授权公钥的使用。

如果使用私钥对数据进行加密的话,加密就没有意义,因为每个人都可以拥有公钥,所以每个人都可以用公钥进行解密。所以,通常使用私钥对摘要进行加密,然后把加密后的摘要追加到明文的后面,再使用对称密钥对明文和摘要进行整体加密。假如a为私钥拥有者,那么接收者b拿到密文后,可以用对称密钥解密,使用公钥对摘要进行解密,通过对比摘要,可以证明密文是否被篡改,也可以证明密文是否来自私钥的拥有者a,这也就是验签。如果b要向a发送消息,可以使用公钥对消息进行加密,因为只有a拥有私钥,所以只有a可以解密。整体来说,通常是,公钥加密、私钥解密。


加密--公钥
解密--私钥
签名--私钥
验证--公钥


---生成私钥和公钥---
$ openssl 进入OpenSSL程序
OpenSSL> genrsa -out rsa_private_key.pem 1024 

#生成私钥 这里-out指定生成文件的。
需要注意的是这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密。
后面的1024是生成密钥的长度。
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
#从私钥文件中抽取生成公钥


-----加密-----
创建hello文件
OpenSSL> rsautl -encrypt -in hello -inkey rsa_public_key.pem -pubin -out hello.en
-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。

-----解密-----
OpenSSL> rsautl -decrypt -in hello.en -inkey rsa_private_key.pem -out hello.de

-in指定被加密的文件,-inkey指定私钥文件,-out为解密后的文件。


[url=http://doc.open.alipay.com/doc2/detail?treeId=58&articleId=103242&docType=1]阿里[/url]

---针对JAVA-----
Java开发者需要将私钥转换成PKCS8格式
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt


---针对Python-----
安装python-RSA模块
"rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem"生成的public_key不适用与python
需要重新生成public_key,
方法:通过pyrsa-priv2pub命令,从rsa_private_key.pem中抽取public_key
pyrsa-priv2pub -i rsa_private_key.pem -o py_public_key.pem

[url=http://stuvel.eu/files/python-rsa-doc/compatibility.html#interoperability-with-pkcs-8]参考[/url]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值