from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
class AES_enc():
def __init__(self, key, iv):
self.block_size = AES.block_size #設置block_size的大小為16字節,也就是128位
self.key = key
self.iv = iv
self.mode = AES.MODE_CBC #采用CBC模式
#加密時自動補全16位,填充內容是“16-len(s)”對應的ascii字符
self.padding_chr = lambda s: s + (self.block_size - len(s) % self.block_size) * chr(self.block_size - len(s) % self.block_size)
#解密時反向剪裁補充字符
self.unpadding_chr = lambda s: s[0:-ord(s[-1])]
#加密
def encrypt(self, text):
cryptor = AES.new(self.key, self.mode, self.iv)
text = self.padding_chr(text)
ciphertext = cryptor.encrypt(text)
#把加密后的字符串轉化為16進制字符串 ,也可以轉換為base64加密的內容,使用b2a_base64(ciphertext)或者base64.urlsafe_b64decode(ciphertext)
return b2a_hex(ciphertext).decode("utf-8")
# 解密
def decrypt(self, text):
cryptor = AES.new(self.key, self.mode, self.iv)
plain_text = cryptor.decrypt(a2b_hex(text)).decode("utf-8")
return self.unpadding_chr(plain_text)
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
