python高级加密算法AES对信息进行加密和解密
AES(高级加密标准)是一种广泛使用的对称加密算法,它以字节为单位处理数据,将明文分组加密成密文。AES算法的核心在于一个轮函数,该函数会对数据执行多次变换,包括字节代换、行移位、列混合和轮密钥加。这些操作确保了数据的安全性,使得原始数据经过AES加密后变得无法识别。
AES加密过程
AES加密过程涉及以下几个关键步骤:
-
字节代换:这一步使用一个预定义的S盒(替换表)来替换状态矩阵中的每个字节。这是一个非线性过程,增加了密码的复杂性。
-
行移位:状态矩阵中的行将根据其行号进行循环左移,第一行不动,第二行移动一个字节,以此类推。
-
列混合:这一步涉及到矩阵的乘法,将状态矩阵与一个固定的矩阵相乘,以实现混淆。
-
轮密钥加:将状态矩阵与轮密钥进行异或操作。轮密钥是通过密钥编排算法从原始密钥生成的。
AES解密过程
AES解密过程是加密过程的逆过程,涉及逆字节代换、逆行移位、逆列混合和轮密钥加。由于AES的每个步骤都是可逆的,因此可以通过执行相反的操作来解密数据。
密钥扩展
AES算法首先将初始密钥放入一个4x4的状态矩阵中,然后通过密钥编排算法扩展出足够的轮密钥。这个过程包括字循环、字节代换和轮常量异或等步骤。
python代码实现
import string
import random
from Crypto.Cipher import AES
#生成指定长度的密钥
def keyGenerater (length):
if length not in (16, 24, 32):
return None
x = string.ascii_letters + string.digits
return ''.join([random.choice(x) for i in range (length) ]).encode ()
#返回加密/解密器
def encryptor_decryptor (key,mode):
if mode == AES.MODE_ECB:
return AES.new(key,mode)
return AES.new (key, mode, b'0'* 16)
#使用指定密钥和模式对给定信息进行加密
def AESencrypt (key, mode, text):
encryptor = encryptor_decryptor (key,mode)
return encryptor.encrypt(text)
#使用指定密钥和模式对给定信息进行解密
def AESdecrypt (key,mode,text):
decryptor = encryptor_decryptor (key,mode)
return decryptor.decrypt(text)
if __name__=='__main__':
text= '玄之又玄,众妙之门。Python is excellent.'
key =keyGenerater(16)
#随机选择 AES 的模式
mode = random.choice((AES.MODE_CBC,AES.MODE_CFB,
AES.MODE_ECB,AES.MODE_OFB) )
if not key:
print('密钥生成错误。')
else:
print('key:', key.decode ())
print('mode:',mode)
print('Before encryption:', text)
#明文必须以字节串形式,且长度为16的倍数
text_encoded =text.encode()
text_length = len (text_encoded)
padding_length =16-text_length%16
text_encoded = text_encoded + b'0' * padding_length
text_encrypted = AESencrypt (key, mode, text_encoded)
print('After encryption:', text_encrypted)
text_decrypted = AESdecrypt (key, mode, text_encrypted)
print ('After decryption:',
text_decrypted.decode()[:-padding_length])
原文地址:https://blog.csdn.net/m0_69704149/article/details/145286107
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!