標籤:aes python 加密 解密
AES加密資料塊分組長度必須為128位元,密鑰長度可以是128位元、192位元、256位元中的任意一個(如果資料區塊及密鑰長度不足時,會補齊)。AES加密有很多輪的重複和變換。大致步驟如下:1、密鑰擴充(KeyExpansion),2、初始輪(Initial Round),3、重複輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(Final Round),最終輪沒有MixColumns。
AES的加密解密方法如下,其中password只能是16,24或32位的字串。
# encoding:utf-8from Crypto.Cipher import AESfrom Crypto import Randomdef encrypt(data, password): bs = AES.block_size pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs) iv = Random.new().read(bs) cipher = AES.new(password, AES.MODE_CBC, iv) data = cipher.encrypt(pad(data)) data = iv + data return datadef decrypt(data, password): bs = AES.block_size if len(data) <= bs: return data unpad = lambda s : s[0:-ord(s[-1])] iv = data[:bs] cipher = AES.new(password, AES.MODE_CBC, iv) data = unpad(cipher.decrypt(data[bs:])) return data if __name__ == '__main__':data = 'hello world'password = '1111111111111111' #16,24,32位長的密碼encrypt_data = encrypt(data, password)print 'encrypt_data:', encrypt_datadecrypt_data = decrypt(encrypt_data, password)print 'decrypt_data:', decrypt_data
如果提示沒有Crypto導致執行失敗,可以使用pip install pycrypto安裝相應模組解決問題。
執行結果如下:
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
python AES加密解密