在了解加密和解密的过程前,我们先了解一些基础概念
“密钥” 就是一个字符串, 度量单位是"位" (bit), 比如,密钥长度是128,就是16字节的二进制串
特点:只有一个密钥,密钥必须保密,常用的有 AES 算法
除了AES 加密外,还有一种加密分组的模式,就是明文进行分组加密,其中微信支付中使用的是 AEAD_AES_256_GCM
优点:运算速度快
缺点:秘钥需要信息交换的双方共享,一旦被窃取,消息会被破解,无法做到安全的密钥交换
特点:使用两个密钥,公钥和私钥,公钥可以任意分发而私钥需要保密,常见的算法为 RSA加密
Tips: 使用公钥加密后只能使用私钥解密,反过来,私钥加密后也只能用公钥解密。
优点:黑客获取公钥无法破解密文,解决了密钥交换问题
缺点:运算速度非常慢
补充说明:
在实际的场景中,通常都是把对称加密和非对称加密结合起来使用的。因为非对称加密的运算速度慢,对称加密的密钥存在被窃取风险。
通信时,可以先通过非对称加密的方式传输对称加密中的密钥,这样子就不存在被窃取的风险;然后再通过私钥解密得到对称加密的密钥,最后就可以正常使用对称加密的方式进行数据传输了。这样子大幅度提升效率和保障安全性。
下面有一种场景,Bob 和他的朋友们要进行信件通信,为了保障安全性,他们使用了公钥加密,私钥解密的方式。
图一表示 Bob保留了自己的私钥,并把公钥分发给了他的朋友们
图二表示 Susan 写信时,使用 Bob 的公钥加密后发送。此时Bob收到信件后,用自己的私钥解密后得到信件内容。
同理 Bob的回信,也是使用 Susan的公钥加密,而Susan读信的话就用自己的私钥解密。
从上面的场景不难看出公钥加密,私钥解密的主要作用就是加密信息。那如果我们使用私钥加密,公钥解密的作用又是什么呢?
图3中,Bob用自己的私钥加密信件后发送,不难看出只要拥有 Bob的公钥,任何人都能知道信件内容,显然并没有起到加密信息的作用
图4和图3是同个场景,但只要信件内容能用 Bob 的公钥进行解密的话,就能确定这封信是Bob写的,这里其实起到了一个身份认证的作用。
私钥加密,公钥解密的作用是身份认证。