AES-CBC-PKCS7Padding
阿新 • • 發佈:2019-02-18
#coding=utf-8 import hashlib from Crypto.Cipher import AES import base64 class AesCrypter(object): def __init__(self, key): # self.key = hashlib.sha256(key).digest() # self.iv = self.key[:16] # key是16個位元組,也就是128位 16*8 # key可以是16*8=128, 24*8=192, 32*8=256位 self.key = self.iv = key def encrypt(self, data): data = self.pkcs7padding(data) cipher = AES.new(self.key, AES.MODE_CBC, self.iv) encrypted = cipher.encrypt(data) return base64.b64encode(encrypted) def decrypt(self, data): data = base64.b64decode(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): #AES.block_size 16位 bs = AES.block_size padding = bs - len(data) % bs padding_text = chr(padding) * padding return data + padding_text def pkcs7unpadding(self, data): lengt = len(data) unpadding = ord(data[lengt - 1]) return data[0:lengt-unpadding] if __name__ == '__main__': aes = AesCrypter('UITN25LMUQC436IM')
#原文必須是blocksize的整數倍
encrypted = aes.encrypt('2633930920939309999333333')
print encrypted
plain = aes.decrypt(encrypted)
print plain