赞
踩
高级加密标准
(英语:Advanced Encryption Standard,缩写:AES
),是一种区块加密标准,简而言之就是一种十分安全,基本无法破解的加密算法。对称加密
,支持长度有 128, 192, 256 bit 共3种, 分别表示密钥的长度为16byte, 24byte和 32byte。明文1(128位) 明文2(128位)
,加密后: 密文1(128位) 密文2(128位)
填充方法 | 说明 |
---|---|
NoPadding | 不进行填充,要求明文必须要是16个字节的整数倍 |
PKCS5Padding(默认) | 明文的末尾进行填充,填充的数据是和16个字节相差的数量 |
ISO10126Padding | 明文的末尾进行填充,和16个字节相差的数量填写在最后,其余字节填充随机数 |
模式
是需要制定AES对明文进行加密时使用的模式(这里并不涉及具体的加密方法,只是加密步骤上的不同模式,在加解密时同样需要相同的模式,否则无法成功)五种模式
,模式的基本原理是近似的,但是细节上会有一些变化模式 | 说明 |
---|---|
ECB模式(默认) | 电码本模式:根据密钥的位数,将数据分成不同的块进行加密,加密完成后,再将加密后的数据拼接起来 |
CBC模式 | 密码分组链接模式 :引入了初始向量概念,该向量必须和密钥长度相等的数据,在第一次加密前,会使用初始化向量与第一块数据做异或运算,生成的新数据再进行加密,加密第二块之前,会拿第一块的密文数据与第二块明文进行异或运算后再进行加密 |
CFB模式 | 密码反馈模式 |
OFB模式 | 输出反馈模式 |
CTR模式 | 计算器模式 |
pip install pycryptodome
(window系统,python3.8版本)""" 计算AES加解密的python程序 加密模式:AES 128 默认填充 CBC模式 """ from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class AesCrypter(object): def __init__(self, key , iv): self.key = key self.iv = iv def encrypt(self, data): data = data.encode() data = self.pkcs7padding(data) # 判断长度,若不够进行填充 cipher = AES.new(self.key, AES.MODE_CBC, self.iv) encrypted = cipher.encrypt(data) return b2a_hex(encrypted) # 转成hex格式返回 def decrypt(self, data): data = a2b_hex(data) cipher = AES.new(self.key, AES.MODE_CBC, self.iv) decrypted = cipher.decrypt(data) decrypted = self.pkcs7unpadding(decrypted) return decrypted def pkcs7padding(self, data): bs = AES.block_size padding = bs - len(data) % bs padding_text = chr(padding) * padding return data + padding_text.encode('utf-8') def pkcs7unpadding(self, data): lengt = len(data) unpadding = data[lengt - 1] return data[0:lengt-unpadding] if __name__ == '__main__': AES_KEY = '1234567812345678' # 16 byte的加解密密钥 AES_IV = '1234567812345678' # 16 byte的偏移向量 aes = AesCrypter(AES_KEY, AES_IV) encrypted = aes.encrypt('1') # 加密 print (str.format("%s %d"%(encrypted, len(encrypted)))) plain = aes.decrypt(encrypted) # 解密 print (plain, len(plain))
感谢阅读 若有错误 敬请见谅 !!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。