Python 的AES加密與解密

2021-10-07 19:17:17 字數 3077 閱讀 8772

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

從安全性角度推薦cbc加密方法,本文介紹了cbc,ecb兩種加密方法的python實現。

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

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

pip install pycrypto
區別:

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

ecb加密不需要iv

from crypto.cipher import aes

from binascii import b2a_hex, a2b_hex

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

defadd_to_16

(text):if

len(text.encode(

'utf-8'))

%16: add =16-

(len

(text.encode(

'utf-8'))

%16)else

: add =

0 text = text +

('\0'

* add)

return text.encode(

'utf-8'

)# 加密函式

defencrypt

(text)

: key =

'9999999999999999'

.encode(

'utf-8'

) mode = aes.mode_cbc

iv = b'qqqqqqqqqqqqqqqq'

text = add_to_16(text)

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

cipher_text = cryptos.encrypt(text)

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

return b2a_hex(cipher_text)

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

defdecrypt

(text)

: key =

'9999999999999999'

.encode(

'utf-8'

) iv = b'qqqqqqqqqqqqqqqq'

mode = aes.mode_cbc

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

plain_text = cryptos.decrypt(a2b_hex(text)

)return

bytes

.decode(plain_text)

.rstrip(

'\0'

)if __name__ ==

'__main__'

: e = encrypt(

"hello world"

)# 加密

d = decrypt(e)

# 解密

print

("加密:"

, e)

print

("解密:"

, d)

"""

ecb沒有偏移量

"""from crypto.cipher import aes

from binascii import b2a_hex, a2b_hex

defadd_to_16

(text):if

len(text.encode(

'utf-8'))

%16: add =16-

(len

(text.encode(

'utf-8'))

%16)else

: add =

0 text = text +

('\0'

* add)

return text.encode(

'utf-8'

)# 加密函式

defencrypt

(text)

: key =

'9999999999999999'

.encode(

'utf-8'

) mode = aes.mode_ecb

text = add_to_16(text)

cryptos = aes.new(key, mode)

cipher_text = cryptos.encrypt(text)

return b2a_hex(cipher_text)

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

defdecrypt

(text)

: key =

'9999999999999999'

.encode(

'utf-8'

) mode = aes.mode_ecb

cryptor = aes.new(key, mode)

plain_text = cryptor.decrypt(a2b_hex(text)

)return

bytes

.decode(plain_text)

.rstrip(

'\0'

)if __name__ ==

'__main__'

: e = encrypt(

"hello world"

)# 加密

d = decrypt(e)

# 解密

print

("加密:"

, e)

print

("解密:"

, d)

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 python 在windows下使用aes時要安裝的是pycryptodome 模組 pip install pycryptodome python 在linux下使用aes時要安裝的是pycrypto模組 pip install pyc...

Python 的AES加密與解密

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