這篇文章主要為大家展示了Python如何實(shí)現(xiàn)aes加密解密,內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來看看吧。
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)張灣,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792引子:
在windows中python3使用 pycryptodemo 模塊實(shí)現(xiàn)Aes加密解密。Aes加密有多種方式,自己可以上網(wǎng)了解下。 AES是每16位一加密,并且保證key和vi都是16位的。廢話不多說直接上代碼。
import base64 from Crypto.Cipher import AES from binascii import b2a_hex,a2b_hex class PrpCrypt(object): def __init__(self,key,iv): self.key=key.encode('utf-8') self.mode=AES.MODE_CBC self.iv=iv.encode('utf-8') def pad_byte(self, b): ''' 1 先計(jì)算所傳入bytes類型文本與16的余數(shù) 2 在將此余數(shù)轉(zhuǎn)成bytes 當(dāng)然用0補(bǔ)位也可以 3 已知了 余數(shù) 那么就用余數(shù)*被轉(zhuǎn)成的余數(shù),就得到了需要補(bǔ)全的bytes 4 拼接原有文本和補(bǔ)位 :param b: bytes類型的文本 :return: 返回補(bǔ)全后的bytes文本 ''' bytes_num_to_pad = AES.block_size - (len(b) % AES.block_size) # python3 中默認(rèn)unicode轉(zhuǎn)碼 # 實(shí)際上byte_to_pad 就已經(jīng) 將 數(shù)字轉(zhuǎn)成了unicode 對(duì)應(yīng)的字符 即使你的入?yún)⒄檬?6的倍數(shù),那么bytes也是把列表整體的轉(zhuǎn)碼也是有值的 # 后邊解密的匿名函數(shù) 拿到最后一個(gè)數(shù)字后,就知道應(yīng)該截取的長(zhǎng)度,在反著切片就行了 # 這樣保證了數(shù)據(jù)的完整性 byte_to_pad = bytes([bytes_num_to_pad]) padding = byte_to_pad * bytes_num_to_pad padded = b + padding return padded def encrypt(self,text): ''' 1 先生成aes實(shí)例 2 對(duì)傳入的text轉(zhuǎn)成bytes 3 對(duì)傳入的text補(bǔ)全 4 調(diào)用encrypt 加密 得到密文 5 先將密文轉(zhuǎn)16進(jìn)制,在將16進(jìn)制用base64轉(zhuǎn)碼,然后在將得到的base64解碼 其實(shí)在步驟4 就已經(jīng)完成了aes加密,我所在的公司加密比較復(fù)雜 ,需要的可以直接返回步驟4的值 :param text: :return: ''' cryptor = AES.new(self.key,self.mode,self.iv) text = text.encode('utf-8') text = self.pad_byte(text) self.ciphertext = cryptor.encrypt(text) cryptbase64 = base64.b64encode(b2a_hex(self.ciphertext)).decode('utf8') return cryptbase64 def decrypt(self,text): ''' 解密和加密的順序是相反的 1 定義匿名函數(shù),去掉補(bǔ)位 2 base64解碼 3 生成aes實(shí)例 4 16進(jìn)制轉(zhuǎn)2進(jìn)制 5 使用decrypt解碼 得到補(bǔ)全的bytes類型明文 :param text: :return: 解密且去掉補(bǔ)位的明文 ''' unpad = lambda s: s[:-ord(s[len(s) - 1:])] base64Str = base64.b64decode(text.encode('utf8')) cryptor = AES.new(self.key, self.mode, self.iv) aesStr = cryptor.decrypt(a2b_hex(base64Str)) aesStr = str(unpad(aesStr), encoding='utf8') return aesStr if __name__ == '__main__': data='sadfsasdgsdfgdsf123' pc=PrpCrypt('daajanbaqa654321','1234567890123456') redata = pc.encrypt(data) print(redata) result=pc.decrypt(redata) print(result)
當(dāng)前文章:Python如何實(shí)現(xiàn)aes加密解密-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article6/posig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、標(biāo)簽優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容