AES.new()入参要求
时间: 2024-02-12 19:55:26 浏览: 24
在使用Python的AES模块进行加密解密操作时,需要调用`Crypto.Cipher.AES.new()`方法来创建一个AES对象。该方法的入参要求如下:
- `key`:表示加密使用的密钥,必须是16、24或者32字节长的bytes、bytearray或者str对象。
- `mode`:表示加密模式,可以是ECB、CBC、CFB、OFB等。
- `IV`:表示加密使用的初始化向量,只有在CBC、CFB、OFB模式下才需要提供,必须是16字节长的bytes、bytearray或者str对象。
- `nonce`:表示加密使用的随机数,只有在CCM、EAX、GCM、SIV、OCB等AEAD模式下才需要提供,必须是8字节长的bytes、bytearray或者str对象。
- `segment_size`:表示加密使用的分段大小(单位:bit),只有在CFB、OFB模式下才需要提供,可以是8、16、24、32、40、48、56、64中的任意一个。
- `backend`:表示加密使用的后端,可以是`None`、`Cryptodome`、`pycryptodome`、`openssl`、`commoncrypto`、`winrandom`、`win32crypt`中的一个。
其中,`key`和`mode`是必选参数,其他参数可以根据具体加密需求选择是否提供。
相关问题
AES cipher.encrypt 入参格式
`cipher.encrypt` 方法的入参格式一般为 bytes 类型的明文,长度可以是 16 的倍数。在使用该方法前,需要先对明文进行填充,使其长度为 16 的倍数。填充方式可以选择 PKCS7 填充或者 ZeroPadding 填充。填充后的明文可以通过 `bytes()` 函数转换成 bytes 类型。
以下是一个示例代码:
```python
from Crypto.Cipher import AES
import base64
key = b'1234567890123456' # 密钥,长度必须为 16、24 或 32 字节
iv = b'1234567890123456' # 初始化向量,长度必须为 16 字节
plaintext = 'Hello, world!'
# 使用 PKCS7 填充
pad_len = AES.block_size - len(plaintext) % AES.block_size
padding = bytes([pad_len] * pad_len)
plaintext = plaintext.encode() + padding
# 创建 cipher 对象
cipher = AES.new(key, AES.MODE_CBC, iv)
# 加密明文
ciphertext = cipher.encrypt(plaintext)
# 将密文进行 base64 编码
base64_ciphertext = base64.b64encode(ciphertext)
print(base64_ciphertext)
```
在上面的示例中,我们使用了 PKCS7 填充方式,将明文填充到 16 字节的倍数。然后创建了一个 AES 对象,使用 CBC 模式和指定的密钥和初始化向量进行加密。最后将加密后的密文进行了 base64 编码。
aes = AES.new(key, AES.MODE_CBC, iv)各个参数的意思
`AES.new(key, AES.MODE_CBC, iv)`是使用pycryptodome模块创建AES对象的代码,其中,`key`、`AES.MODE_CBC`和`iv`是参数,分别代表:
- `key`: AES算法的密钥,长度必须为16、24或32字节,即128位、192位或256位。
- `AES.MODE_CBC`: AES算法的工作模式,CBC是其中一种常用的模式,它需要一个初始化向量(iv)来保证加密的安全性。
- `iv`: 初始化向量(Initialization Vector),它是一个随机值,长度必须为16字节,用于CBC模式中的初始加密。
因此,`AES.new(key, AES.MODE_CBC, iv)`的意思是创建一个使用AES算法、CBC工作模式、指定密钥和初始化向量的加密对象。