我需要一个SM4加密的代码
时间: 2023-10-13 22:04:13 浏览: 32
以下是使用 Python 3 写的 SM4 加密代码:
```python
from Crypto.Cipher import SM4
from Crypto.Util.Padding import pad
key = b'1234567890abcdef' # 16 bytes key
plaintext = b'Hello World!'
cipher = SM4.new(key, SM4.MODE_ECB)
ciphertext = cipher.encrypt(pad(plaintext, SM4.block_size))
print(ciphertext.hex())
```
解释一下上面的代码:
1. 导入了 PyCryptodome 库的 SM4 模块和 Util 模块中的 Padding 子模块。
2. 定义了 16 字节的密钥 key 和明文 plaintext。
3. 创建了一个 SM4 对象 cipher,使用了 key 和 SM4 模式中的 ECB 模式。
4. 使用 Padding 子模块中的 pad() 函数对 plaintext 进行填充,使其长度为 SM4 的块大小。
5. 调用 SM4 对象的 encrypt() 方法对填充后的明文进行加密,返回密文 ciphertext。
6. 输出密文的十六进制表示。
需要注意的是,这里使用的是 PyCryptodome 库,而不是 Python 自带的 Crypto 模块。如果没有安装 PyCryptodome 库,可以使用 pip 进行安装:
```
pip install pycryptodome
```