时间:2021-05-22
第一种
import base64from Crypto.Cipher import AES# 密钥(key), 密斯偏移量(iv) CBC模式加密def AES_Encrypt(key, data): vi = '0102030405060708' pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16) data = pad(data) # 字符串补位 cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8')) encryptedbytes = cipher.encrypt(data.encode('utf8')) # 加密后得到的是bytes类型的数据 encodestrs = base64.b64encode(encryptedbytes) # 使用Base64进行编码,返回byte字符串 enctext = encodestrs.decode('utf8') # 对byte字符串按utf-8进行解码 return enctextdef AES_Decrypt(key, data): vi = '0102030405060708' data = data.encode('utf8') encodebytes = base64.decodebytes(data) # 将加密数据转换位bytes类型数据 cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8')) text_decrypted = cipher.decrypt(encodebytes) unpad = lambda s: s[0:-s[-1]] text_decrypted = unpad(text_decrypted) # 去补位 text_decrypted = text_decrypted.decode('utf8') return text_decryptedkey = '0CoJUm6Qyw8W8jud' #自己密钥data = 'sdadsdsdsfd' #需要加密的内容AES_Encrypt(key, data)enctext = AES_Encrypt(key, data)print(enctext)text_decrypted = AES_Decrypt(key, enctext)print(text_decrypted)第二种
#!/usr/bin/env python#encoding=‘utf-8'from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hexfrom Crypto import Randomclass PrpCrypt(object): def __init__(self, key): self.key = key.encode('utf-8') self.mode = AES.MODE_CBC self.iv = Random.new().read(AES.block_size) # 加密函数,如果text不足16位就用空格补足为16位, # 如果大于16当时不是16的倍数,那就补足为16的倍数。 def encrypt(self, text): text = text.encode('utf-8') cryptor = AES.new(self.key, self.mode,self.iv) # 这里密钥key 长度必须为16(AES-128), # 24(AES-192),或者32 (AES-256)Bytes 长度 # 目前AES-128 足够目前使用 length = 16 count = len(text) if count < length: add = (length - count) # \0 backspace # text = text + ('\0' * add) text = text + ('\0' * add).encode('utf-8') elif count > length: add = (length - (count % length)) # text = text + ('\0' * add) text = text + ('\0' * add).encode('utf-8') self.ciphertext = cryptor.encrypt(text) # 因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题 # 所以这里统一把加密后的字符串转化为16进制字符串 return b2a_hex(self.ciphertext) # 解密后,去掉补足的空格用strip() 去掉 def decrypt(self, text): cryptor = AES.new(self.key, self.mode, self.iv) plain_text = cryptor.decrypt(a2b_hex(text)) # return plain_text.rstrip('\0') return bytes.decode(plain_text).rstrip('\0')if __name__ == '__main__': pc = PrpCrypt('0CoJUm6Qyw8W8jud') # 初始化密钥 data = input("请输入待加密数据:")# e = pc.encrypt(data) # 加密 d = pc.decrypt(e).encode() # 解密 print("加密:", e) print("解密:", d)以上就是Python实现AES加密,解密的两种方法的详细内容,更多关于Python实现AES加密,解密的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了python实现AES加密和解密的具体代码,供大家参考,具体内容如下参考:python实现AES加密和解密AES加密算法是一种对称加密算法,
AES加密方式有五种:ECB,CBC,CTR,CFB,OFB从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现python在
本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下(1)对于AES加密解密相关知识(2)实现的功能就是输入0-16个字符,然
本文实例讲述了python实现的AES双向对称加密解密与用法。分享给大家供大家参考,具体如下:高级加密标准(AdvancedEncryptionStandard
本文实例讲述了java使用Hex编码解码实现Aes加密解密功能。分享给大家供大家参考,具体如下:这里的Aes加密解密方法使用Hex进行了编码解码packagec