AES(Advanced Encryption Standard)是一种对称密钥加密算法,用于保护敏感数据。在Python中,你可以使用 cryptography
库来实现AES加密。以下是一个简单的使用AES加密的程序,同时提供了详细的描述:
安装 cryptography 库
首先,确保你已经安装了 cryptography
库。你可以使用以下命令来安装:
pip install cryptography
AES加密程序
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from base64 import b64encode, b64decode
def generate_key():
# 生成一个随机的32字节密钥
return b64encode(os.urandom(32))
def pad(text):
# PKCS7填充
block_size = 16
padding_size = block_size - len(text) % block_size
padding = bytes([padding_size] * padding_size)
return text + padding
def unpad(text):
# 去除PKCS7填充
padding_size = text[-1]
return text[:-padding_size]
def encrypt(plaintext, key):
backend = default_backend()
cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=backend)
encryptor = cipher.encryptor()
padded_plaintext = pad(plaintext.encode('utf-8'))
ciphertext = encryptor.update(padded_plaintext) + encryptor.finalize()
return b64encode(ciphertext).decode('utf-8')
def decrypt(ciphertext, key):
backend = default_backend()
cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=backend)
decryptor = cipher.decryptor()
ciphertext_bytes = b64decode(ciphertext)
padded_plaintext = decryptor.update(ciphertext_bytes) + decryptor.finalize()
return unpad(padded_plaintext).decode('utf-8')
def main():
key = generate_key()
plaintext = input("请输入要加密的文本:")
encrypted_text = encrypt(plaintext, key)
decrypted_text = decrypt(encrypted_text, key)
print("\n加密后的文本:", encrypted_text)
print("解密后的文本:", decrypted_text)
if __name__ == "__main__":
main()
详细描述:
-
generate_key
函数用于生成一个随机的32字节密钥,这是AES的标准密钥长度(256位)。 -
pad
和unpad
函数用于进行PKCS7填充和去除填充。在AES中,数据需要被块大小整除,所以可能需要进行填充。 -
encrypt
函数接受明文和密钥作为输入,使用AES算法和ECB模式对明文进行加密。 -
decrypt
函数接受密文和密钥作为输入,使用AES算法和ECB模式对密文进行解密。 -
main
函数获取用户输入的明文,生成一个随机密钥,然后使用该密钥对明文进行加密和解密。最后,打印加密和解密后的文本。
请注意,ECB模式是一种基础模式,对于相同的明文块,生成的密文块是相同的,这可能导致一些安全性问题。在实际应用中,可能需要考虑使用其他更安全的模式,例如CBC。此外,密钥的生成也可能需要更复杂的处理,具体取决于你的安全需求。