AES加解密
阿新 • • 發佈:2021-09-14
CBC模式
加密:
from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex text = 'wo is liming' #需要加密的內容 while len(text.encode('utf-8')) % 16 != 0: # 如果text不足16位的倍數就用空格補足為16位 text += '\0' text=text.encode() mode = AES.MODE_CBC #定義模式 key = '1234567890123456'.encode('utf-8') #祕鑰##祕鑰:必須是16位位元組或者24位位元組或者32位位元組(因為python3的字串是unicode編碼,需要 encode才可以轉換成位元組型資料) iv = b'abcdabcdabcdabcd' #偏移量--必須16位元組 cryptos = AES.new(key, mode, iv) #建立一個aes物件 cipher_text = cryptos.encrypt(text) #利用aes物件進行加密#b'\xf7t\xa0\x18 \x84-\xcco-\x91\xf5\xdb\x89\xe3\x88' x=b2a_hex(cipher_text) # 因為AES加密後的字串不一定是ascii字符集的,輸出儲存可能存在問題,所以這裡轉為16進位制字串#b'f774a01820842dcc6f2d91f5db89e388' en_text = x.decode('utf-8') #轉換成python中的字串型別 #<class 'str'> f774a01820842dcc6f2d91f5db89e388 print(type(en_text),en_text)
解密:
from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex mode = AES.MODE_CBC #定義模式 key = '1234567890123456'.encode('utf-8') #祕鑰 ##祕鑰:必須是16位位元組或者24位位元組或者32位位元組(因為python3的字串是unicode編碼,需要 encode才可以轉換成位元組型資料) iv = b'abcdabcdabcdabcd' #偏移量--必須16位元組 cryptos = AES.new(key, mode, iv) #建立一個aes物件 text = 'f774a01820842dcc6f2d91f5db89e388' #需要解密的內容 x=a2b_hex(text) # 16進位制轉換成二進位制 b'\xf7t\xa0\x18 \x84-\xcco-\x91\xf5\xdb\x89\xe3\x88' x=cryptos.decrypt(x) #解密 # b'wo is liming\x00\x00\x00\x00' x=bytes.decode(x).rstrip('\0') #轉換成字串 #<class 'str'> wo is liming print(type(x),x)