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为解密后的文件。


阿里

---针对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

参考

猜你喜欢

转载自ontheroad-luckhouge.iteye.com/blog/2257237
今日推荐