假如 Peter 是1名会计经理, Alice 是1名HR, 但是他们平时并不处于同1个office.
Alice 定期都要把工资单(excel)通过邮件发给Peter.
某一日, Peter 觉得这么做很不安全,他需要Alice把工资单加密后才发过来。
这时Alice 用excel的加密功能把工资单加密了. 这时她发现加密时必须提供1个密码(key)
而且她必须把密码通过另外的渠道发给Peter.
Peter 必须使用相同的密码解密工资单
实际上, 其中加密和解密过程中都必须提供1个key, 而对于这种加密和密码都使用同1个key(或者说key的相同副本)的加密方式就叫做对称加密。
由于业务扩展, 集团扩展了多个分公司, 每个公司的hr都需要把分公司的工资单加密发给Peter
某一日, 另1个新分公司的HR Jenny 第一次把加密工资单发给Peter时,同时把对应的新密码发给Peter。
这时Peter觉得把密码通过网络发送还是有点危险, 一旦有人截取了这个密码, 就可以解密对应的工资单获取到敏感数据。
而且 Jenny 和 Alice她们也有私下交流密码信息的风险.
这时Peter 通过自我学习 知道了RSA 非对称加密的方法
非对称加密需要两个key
分别是
public key(公钥): 所谓public 的意思就是这个key不怕被公开, 用于加密数据
private key(私钥): 所谓private的意思就是这个key不能被公开, 用于解密数据
而且这对keys 的特点是:
用公钥加密的数据只能被私钥解密, 公钥本身并不能解密自己加密的数据.
这样好了, Peter 在自己的电脑生成了一对 public key 和 private key
然后把公钥发给各个分公司HR。
然后把私钥自己保留住不公开。
然后Alice , Jenny等HR 之后就用公钥加密自己要发的工资表 ,即使她们都使用同1个public key, 但是她们并不能使用public key去解密任何加密后的工资表。 所有加密后的数据只能被Peter用手上的private key去解密, 问题解决。
这种用公钥加密, 用私钥解密的方式就是非对称加密.
问题来了, 既然公钥加密的数据可以被私钥解密
那么私钥加密的数据可以被公钥解密吗?
至少对于RSA算法是可以的
但是由于安全原因, 并不建议用私钥加密数据 公钥解密这种方式。原因很简单, 因为公钥已经被公开。
例如Peter 想把自己对某个分公司的提成建议方案 加密发送给Jenny, 一旦Peter用自己私钥加密后发送给Jenny的话, 虽然Jenny的确可以公钥解密出Peter的数据, 但是别忘了公钥是公开的, Alice等其他HR甚至某些黑客已经具有了相同的公钥, 这样Peter发送的数据就不安全了。
所以这种非对称加密方式适用与数据单项加密传输的情景(HR -> 会计)
但是并不适用于需要数据双向加密传输的场景.
这时Peter 又想了个方法可以让Peter和Alice, Jenny等其他HR可以双向加密交流。
Peter 先让 Alice 先想1个密码, 然后把这个密码用公钥加密后发送给Peter, Peter 就可以用私钥解密出这个密码(非对称加密),
这时, Peter 和 Alice 都有1个同一个密码副本,然后这时他们两个就可以用这个临时密码进行普通加密方式来交流。(对称加密)
因为外面的人并不知道Alice 发送了什么密码给Peter, 所以一段时间内这种加密方式是安全的。
当Peter 觉得要更新交流密码的时候, 让Alice 通过非对称加密方式发送1个新的密码过来就行
这种交流方式同时使用了非对称加密 和 对称加密 两种加密方式。 而非对称加密只用于生成临时 对称加密 的key。
这种方式 实际上也是 Https的原理。
client (Alice) 和 server (Peter) 在正式建立连接之前, 有一段握手过程(TLS 握手方式), 在这个过程中, 很重要的一个目的就是利用非对称加密方式 交流出1个 用于对称加密的临时key, 之后 client 和 server 之间就可与用这个临时的key来继续之后的数据传输了(对称加密方式)。
一旦谈到数学, 很难用通俗方法来阐述了, 有兴趣可以参考我下面另一篇文章
https://blog.csdn.net/nvd11/article/details/131495265