Java和Python的RSA及AES加解密对应
最近遇到了需要用Python实现RSA和AES加解密的场景,进行记录。
一、需求
1.生成一个AES秘钥
2.使用AES秘钥加密数据
3.使用RSA的公钥加密AES的秘钥
4.使用RSA的公钥加密2的数据,并且是按照每117个字节为单位分块加密
5.服务端接收到消息后,解密,返回数据
6.客户端接受到数据后,用RSA的私钥分块解密数据
7.使用RSA私钥解密服务端的AES秘钥
8.使用AES解密6的数据
二、使用到的类
其中使用的类如下:
功能 | Java类 | Python类 |
---|---|---|
AES加密 | 在使用Cipher类时,需要指定一个字符串说明用的是哪种算法,历史的AES加密使用的是“AES/ECB/PKCS1Padding” | 在Python里,对应的是在构造Cipher时传入参数,需要指定MODE_ECB |
RSA加密 | 同样,RSA的串是“RSA/ECB/PKCS1Padding” | 在Python里对应的是Crypto模块PKCS1_v1_5默认就是这个参数 |
三、一些细节
- ECB是什么意思?
简单来说,ECB加密的时候直接加密,CBC会进行一次异或,并且密文分组像链条一样互相连接
- AES/ECB/PKCSPadding每个段是什么意思?
algorithm/mode/padding
mode如上所说,简单理解为偏移量
padding简单理解为加密内容不足8位的时候会用0补齐需要自己实现补足逻辑