为啥要用RSA+AES混合加密?安全和速度的妥协呗,RSA更安全但是速度实在太慢
一般逻辑顺序
加密过程
- 准备好RSA公钥(假设为key_rsa_pub)
- 随机生成AES加密密钥:key_aes_rand(这个会经过RSA加密发送给接收方)
- 使用key_aes_rand对需要发送的数据msg进行AES加密(加密时需要对数据进行填充),得到encrypted_msg
- 第3步aes加密后的数据有些是不可见数据,网络传输时可能会出错,此时会再进一步进行base64编码,得到base64ed_encrypted_msg
- 对key_aes_rand使用key_rsa_pub进行RSA加密、base64,得到base64ed_encrypted_key_aes_rand
- 把base64ed_encrypted_msg和base64ed_encrypted_key_aes_rand发送给接收方即可
解密过程
- 准备好RSA私钥(key_rsa_pri)
- 对接收到的数据拆分,得到base64ed_encrypted_msg和base64ed_encrypted_key_aes_rand
- 对base64ed_encrypted_key_aes_rand进行base64解密,得到encrypted_key_aes_rand
- 对encrypted_key_aes_rand,使用RSA私钥key_rsa_pri解密,得到key_aes_rand
- 对base64ed_encrypted_msg进行base64解密,得到encrypted_msg
- 对encrypted_msg,使用key_aes_rand进行AES解密得到msg
说明
- 以上流程实际上就是用随机生成的AES密钥对原始信息加密,然后用RSA公钥对AES的随机密钥加密,将两个加密后的数据发给接收端
- 相比较直接AES加密的方式,混合加密时AES的密钥时随机生成的。(通过RSA加密后再发送给接收端)
- RSA加密使用的公钥时公开的
上代码
1 | import base64 |