Python 的AES加密與解密

2021-10-02 08:41:19 字數 3075 閱讀 2377

aes加密方式有五種:ecb, cbc, ctr, cfb, ofb

python 在windows下使用aes時要安裝的是pycryptodome 模組   pip install pycryptodome 

python 在linux下使用aes時要安裝的是pycrypto模組   pip install pycrypto 

cbc加密需要乙個十六位的key(金鑰)和乙個十六位iv(偏移量)

ecb加密不需要iv

aes cbc 加密的python實現

1 from crypto.cipher import aes

2 from binascii import b2a_hex, a2b_hex

3 4

5 # 如果text不足16位的倍數就用空格補足為16位

6 def add_to_16(text):

7 if len(text.encode('utf-8')) % 16:

8 add = 16 - (len(text.encode('utf-8')) % 16)

9 else:

10 add = 0

11 text = text + ('\0' * add)

12 return text.encode('utf-8')

13 14

15 # 加密函式

16 def encrypt(text):

17 key = '9999999999999999'.encode('utf-8')

18 mode = aes.mode_cbc

19 iv = b'qqqqqqqqqqqqqqqq'

20 text = add_to_16(text)

21 cryptos = aes.new(key, mode, iv)

22 cipher_text = cryptos.encrypt(text)

23 # 因為aes加密後的字串不一定是ascii字符集的,輸出儲存可能存在問題,所以這裡轉為16進製制字串

24 return b2a_hex(cipher_text)

25 26

27 # 解密後,去掉補足的空格用strip() 去掉

28 def decrypt(text):

29 key = '9999999999999999'.encode('utf-8')

30 iv = b'qqqqqqqqqqqqqqqq'

31 mode = aes.mode_cbc

32 cryptos = aes.new(key, mode, iv)

33 plain_text = cryptos.decrypt(a2b_hex(text))

34 return bytes.decode(plain_text).rstrip('\0')

35 36

37 if __name__ == '__main__':

38 e = encrypt("hello world") # 加密

39 d = decrypt(e) # 解密

40 print("加密:", e)

41 print("解密:", d)

aes ecb加密的python實現

1 """

2 ecb沒有偏移量

3 """

4 from crypto.cipher import aes

5 from binascii import b2a_hex, a2b_hex

6 7

8 def add_to_16(text):

9 if len(text.encode('utf-8')) % 16:

10 add = 16 - (len(text.encode('utf-8')) % 16)

11 else:

12 add = 0

13 text = text + ('\0' * add)

14 return text.encode('utf-8')

15 16

17 # 加密函式

18 def encrypt(text):

19 key = '9999999999999999'.encode('utf-8')

20 mode = aes.mode_ecb

21 text = add_to_16(text)

22 cryptos = aes.new(key, mode)

23 24 cipher_text = cryptos.encrypt(text)

25 return b2a_hex(cipher_text)

26 27

28 # 解密後,去掉補足的空格用strip() 去掉

29 def decrypt(text):

30 key = '9999999999999999'.encode('utf-8')

31 mode = aes.mode_ecb

32 cryptor = aes.new(key, mode)

33 plain_text = cryptor.decrypt(a2b_hex(text))

34 return bytes.decode(plain_text).rstrip('\0')

35 36

37 if __name__ == '__main__':

38 e = encrypt("hello world") # 加密

39 d = decrypt(e) # 解密

40 print("加密:", e)

41 print("解密:", d)

分類: python基礎

標籤: aes

Python 的AES加密與解密

aes加密方式有五種 ecb,cbc,ctr,cfb,ofb python 在windows下使用aes時要安裝的是pycryptodome 模組pip install pycryptodome python 在linux下使用aes時要安裝的是pycrypto模組pip install pycry...

Python 的AES加密與解密

aes加密方式有五種 ecb,cbc,ctr,cfb,ofb 從安全性角度推薦cbc加密方法,本文介紹了cbc,ecb兩種加密方法的python實現。python 在 windows下使用aes時要安裝的是pycryptodome模組 pip install pycryptodomepython 在...

Python 的AES加密與解密

aes加密方式有五種 ecb,cbc,ctr,cfb,ofb 從安全性角度推薦cbc加密方法,本文介紹了cbc,ecb兩種加密方法的python實現 python 在 windows下使用aes時要安裝的是pycryptodome 模組 pip install pycryptodome python...