python encrypt 實現AES加密

2022-03-05 11:03:36 字數 2632 閱讀 6905

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

從安全性角度推薦cbc演算法

windows 下安裝 : pip install pycryptodome

linux 下安裝 : pip install pycrypto

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

ecb加密不需要iv

aes cbc 加密的python實現

from crypto.cipher import

aesfrom binascii import

b2a_hex, a2b_hex

#如果text不足十六位的倍數用空格補充

defadd_to_16(text):

if len(text.encode('

utf8

')) % 16:

add = 16 - (len(text.encode('

utf8

')) % 16)

else

: add =0

text = text + '

\0' *add

return

text#加密

defencrypt(text):

key = '

9999999999999999

'.encode('

utf8')

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)

#解密後去掉空格

defdecrypt(text):

key = '

9999999999999999

'.encode('

utf8')

mode =aes.mode_cbc

iv = b'

qqqqqqqqqqqqqqqq

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

plain_text =cryptos.decrypt(a2b_hex(text))

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

)if__name__ == '

__main__':

a = encrypt('

hello')

b =decrypt(a)

print('加密'

, a)

print('

解密', b)

aes ecb加密, 沒有偏移量iv

from crypto.cipher import

aesfrom binascii import

b2a_hex, a2b_hex

#如果text不足十六位的倍數用空格補充

defadd_to_16(text):

if len(text.encode('

utf8

')) % 16:

add = 16 - (len(text.encode('

utf8

')) % 16)

else

: add =0

text = text + '

\0' *add

return

text#加密

defencrypt(text):

key = '

9999999999999999

'.encode('

utf8')

mode =aes.mode_ecb

text =add_to_16(text)

cryptos =aes.new(key, mode)

cipher_text =cryptos.encrypt(text)

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

return

b2a_hex(cipher_text)

#解密後去掉空格

defdecrypt(text):

key = '

9999999999999999

'.encode('

utf8')

mode =aes.mode_ecb

cryptos =aes.new(key, mode)

plain_text =cryptos.decrypt(a2b_hex(text))

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

)if__name__ == '

__main__':

a = encrypt('

hello')

b =decrypt(a)

print('加密'

, a)

print('

解密', b)

快速排序演算法實現(遞迴實現 棧實現)

基本思想 選擇乙個基準元素,比如選擇最後乙個元素,通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,又稱為軸位置,此位置的元素確定後不再參與排序,然後再用同樣的方法遞迴地排序劃分的兩部分。分析 快速排序是不穩定的排序。快速排序的時間複...

介面實現與配置實現

在實現系統功能的時候,通常會首先定義好功能的介面,在系統功能不斷被實現的過程中,慢慢的發現有些介面的實現很類似,這個時候通常會開始做一次抽象,形 成乙個共同的部分,慢慢的系統形成了乙個抽象的層次,而為了通用,通常是通過定義介面,形成乙個抽象類,抽象類中暴露出一些抽象方法供外部擴充套件實 現,逐步的積...

js分頁實現,前端實現。

主要是借鑑了網上乙個例子,自己重新加了樣式,新增了跳轉,修改了一些小地方,用於和大家一起分享,前端分頁的技巧,的資料是我已經寫好了,其實大家也可以前端渲染 然後再分頁,都是可以的。其實分頁最關鍵是這兩句 var startrow currentpage 1 pagesize 1 currentpag...