AES算法进行编程实现
时间: 2023-12-01 20:57:05 浏览: 73
以下是AES算法的编程实现,使用Python的pycryptodome库:
```
from Crypto.Cipher import AES
def encrypt_AES(key, plaintext):
# 将key转换为16字节的bytes对象
key = key.encode('utf-8')
key = key.ljust(16, b'\0')
# 初始化AES加密器
cipher = AES.new(key, AES.MODE_ECB)
# 将明文转换为16字节的bytes对象
plaintext = plaintext.encode('utf-8')
plaintext = plaintext.ljust(16, b'\0')
# 加密明文
ciphertext = cipher.encrypt(plaintext)
# 将密文转换为16进制字符串
return ciphertext.hex()
def decrypt_AES(key, ciphertext):
# 将key转换为16字节的bytes对象
key = key.encode('utf-8')
key = key.ljust(16, b'\0')
# 初始化AES解密器
cipher = AES.new(key, AES.MODE_ECB)
# 将密文转换为bytes对象
ciphertext = bytes.fromhex(ciphertext)
# 解密密文
plaintext = cipher.decrypt(ciphertext)
# 将明文转换为字符串
return plaintext.rstrip(b'\0').decode('utf-8')
```
使用示例:
```
key = '0123456789abcdef'
plaintext = 'Hello, world!'
ciphertext = encrypt_AES(key, plaintext)
print(ciphertext)
# 输出:'4d3c7f21c3d104a3d6b42b3d6db33e48'
decrypted_plaintext = decrypt_AES(key, ciphertext)
print(decrypted_plaintext)
# 输出:'Hello, world!'
```
以上代码实现了AES算法的加密和解密,使用ECB模式。在加密时,key和plaintext都会被转换为16字节的bytes对象。在解密时,解密出来的明文可能末尾会有一些填充的0字节,需要使用rstrip函数去掉这些0字节。