日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python aes加密 cbc_Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda...

發布時間:2024/9/30 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。