Python 的AES加密與解密

2022-07-06 14:18:09 字數 2490 閱讀 5002

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位

def add_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')

# 加密函式

def encrypt(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() 去掉

def decrypt(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

def add_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')

# 加密函式

def encrypt(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() 去掉

def decrypt(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 pycryptodomepython 在...