python aes加密 cbc_Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda...
1、chr()函數
chr() 用一個范圍在 range(256)內的(就是0~255)整數作參數,返回一個對應的字符。
2、s[a:b:c]
s=(1,2,3,4,5)
1>、 s[a]下標訪問s列表內內容
列表下標從0開始,即
s[0]=1
s[1]=2
s[4]=5
s[-1]=5
s[-2]=4
2>、s[a:b]
這是一個左閉右開區間,即
s[0:2]=(1,2)
s[0:3]=(1,2,3)
s[0:-1]=(1, 2, 3, 4)
s[0:-2]=(1,2,3)
3>、s[a:b:c]即s[起始位置:終止位置:步長]
line = "abcde"line[::-1]#結果為:"edcba"#line[::-1]其實就是反轉字符串。
a='python'b=a[::-1]print(b) #nohtyp
c=a[::-2]print(c) #nhy
a[i:j:s]#表示:i,j與上面的一樣,但s表示步進,缺省為1.#所以a[i:j:1]相當于a[i:j]#當s<0時,i缺省時,默認為-1. j缺省時,默認為-len(a)-1#所以a[::-1]相當于 a[-1:-len(a)-1:-1],也就是從最后一個元素到第一個元素復制一遍,即倒序。
3、匿名函數lambda
#-*- coding:utf-8 -*-#__author__ = "www.iplaypy.com"
#普通python函數
deffunc(a,b,c):return a+b+cprint func(1,2,3)#返回值為6
#lambda匿名函數
f = lambda a,b,c:a+b+cprint f(1,2,3)#返回結果為6
'''f = lambda a,b,c:a+b+c 中的關鍵字lambda表示匿名函數,
冒號:之前的a,b,c表示它們是這個函數的參數。
匿名函數不需要return來返回值,表達式本身結果就是返回值。'''
4、Python實現AES加密和解密
這里采用CBC模式:CBC模式對于每個待加密的密碼塊在加密前會先與前一個密碼塊的密文異或然后再用加密器加密。第一個明文塊與一個叫初始化向量的數據塊異或。
importbase64from Crypto.Cipher importAES#密鑰(key), 密斯偏移量(iv) CBC模式加密
defAES_Encrypt(key, data):
vi= '0102030405060708' #密鑰偏移量
pad = lambda s: s + (16 - len(s)%16) * chr(16 - len(s)%16) #定義一個函數,這個函數的名字pad,這個函數需要一個參數,也就是s。
data = pad(data) #因為CBC模式AES加密需要滿足加密數據長度是密鑰長度的整數倍,所以如果長度不是整數倍,要加數據
#下面兩行就調用函數完成了加密
cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))#加密后得到的是bytes類型的數據
encryptedbytes = cipher.encrypt(data.encode('utf8'))#使用Base64進行編碼,返回byte字符串
encodestrs =base64.b64encode(encryptedbytes)#對byte字符串按utf-8進行解碼
enctext = encodestrs.decode('utf8')returnenctextdef AES_Decrypt(key, data): #解密過程也就是加密過程的逆過程
vi = '0102030405060708' #密鑰偏移量
#轉成byte字符串
data = data.encode('utf8')#使用base64解碼,將加密數據轉換位bytes類型數據
encodebytes =base64.decodebytes(data)#下面兩行代碼對數據解密操作
cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
text_decrypted=cipher.decrypt(encodebytes)#因為CBC模式AES加密需要滿足加密數據長度是密鑰長度的整數倍,所以數據后面可能有不需要的后來添加的數據,所以我們就去掉
#因為添加后綴的時候按照“16 - len(s)%16”,那么后面那個字符的碼值也就是原串原來長度差了多少是16整數倍
unpad = lambda s: s[0:-s[-1]]
text_decrypted=unpad(text_decrypted)
text_decrypted= text_decrypted.decode('utf8')returntext_decrypted
key= '0CoJUm6Qyw8W8jud'data= 'sdadsdsdsfd'AES_Encrypt(key, data)
enctext=AES_Encrypt(key, data)print(enctext)
text_decrypted=AES_Decrypt(key, enctext)print(text_decrypted)
hBXLrMkpkBpDFsf9xSRGQQ==sdadsdsdsfd
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python aes加密 cbc_Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 该项目不在桌面中删除不了_win7系统桌
- 下一篇: python实现宿舍管理系统_基于PYT