Python实现AES加密,解密的两种方法
第一种
importbase64
fromCrypto.CipherimportAES
#密钥(key),密斯偏移量(iv)CBC模式加密
defAES_Encrypt(key,data):
vi='0102030405060708'
pad=lambdas: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进行解码
returnenctext
defAES_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=lambdas:s[0:-s[-1]]
text_decrypted=unpad(text_decrypted)
#去补位
text_decrypted=text_decrypted.decode('utf8')
returntext_decrypted
key='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/envpython
#encoding=‘utf-8'
fromCrypto.CipherimportAES
frombinasciiimportb2a_hex,a2b_hex
fromCryptoimportRandom
classPrpCrypt(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的倍数。
defencrypt(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)
ifcountlength:
add=(length-(count%length))
#text=text+('\0'*add)
text=text+('\0'*add).encode('utf-8')
self.ciphertext=cryptor.encrypt(text)
#因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
#所以这里统一把加密后的字符串转化为16进制字符串
returnb2a_hex(self.ciphertext)
#解密后,去掉补足的空格用strip()去掉
defdecrypt(self,text):
cryptor=AES.new(self.key,self.mode,self.iv)
plain_text=cryptor.decrypt(a2b_hex(text))
#returnplain_text.rstrip('\0')
returnbytes.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加密,解密的资料请关注毛票票其它相关文章!