RSA到底是谁加密?

RSA到底是谁加密?

RRSA加密是最常用的非对称加密方式,原理是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。

但你一定会碰到过,两个开发者争执:到底是由谁加密,谁解密?

看完这篇文章,你就会明白这一切。

规范怎么说

我们先来看看权威库open_ssl的文档描述,它定义了四个方法

  • RSA_private_decrypt

  • RSA_private_encrypt

  • RSA_public_decrypt

  • RSA_public_encrypt

在这里插入图片描述

看起来似乎私钥和公钥都可以用来进行加密解密?

但是仔细查看 RSA_public_decryptRSA_private_encrypt的描述都是:low level signature operations

点进详细描述,我们发现 RSA_public_decrypt 并没有真正的去解密,而仅仅是对密文进行验签!!!

也就是说,对于私钥加密内容,默认的标准包规范是只支持 公钥验签,并不支持公钥解密的。

使用场景

根据以上结论,我们知道规范默认是支持 公钥加密,私钥解密私钥加密,公钥验签

但是我们经常也会碰到私钥加密,公钥解密的情况,到底是怎么回事?其实我们使用RSA加密有常见的三种情况:

  1. 公钥加密,私钥解密

    最常用的一种情况,对接过支付宝就应该碰到过。

    接收方存一个私钥,发送方保存对应的公钥用来发送消息加密,能够确认消息不被泄露。

    所以支付宝会把他生成的一份公钥给你, 你需要把你生成的公钥给支付宝,你们的通信是建立在两对公私钥之上的。

  2. 私钥加密,公钥验签

    发送者把原文和密文同时发布,客户端使用公钥确认是由真正的发送者发出的。

    这种情况一般用于确认消息发布的真实性,可用于推送、广播和公开消息验证场景。

  3. 私钥加密,公钥解密

    这个本身不在推荐规范内的场景,现在却是很常见。

    例如离线软件授权,发布出去的软件里面保存一个公钥,软件厂商使用私钥加密包含到期时间的原文,得到密文,也就是授权码,软件验证的时候使用公钥解密授权码,对比当前时间,确认是否过期。

由于标准包里面并不支持公钥解密,像Golang这种的标准库里面仅仅按照标准包实现的语言,使用公钥解密方法的时候,就需要用到第三方库,或者自己hack。 但是对于老牌的编程语言 C, Java ,PHP 之类的,在标准包内就提供了公钥解密方法。

总结

所以我们能发现,RSA加密方式,并不是一定由谁加密,由谁解密。

而是得根据你的使用场景来定,至于公钥和私钥,其实在数学的概念上是一样的,都是能互相解密的,只是我们根据是公开,还是保存在自己手里来区分。公布出去,不怕泄露的就是公钥,保存在自己手里的就是私钥。

看完这篇文章,如果你觉得对你有帮助,请帮我点个赞。

如果文章有错漏之处,欢迎指出。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值