python實現(xiàn)的AES雙向?qū)ΨQ加密解密與用法分析
本文實例講述了python實現(xiàn)的AES雙向?qū)ΨQ加密解密與用法。分享給大家供大家參考,具體如下:
AES只是個基本算法,實現(xiàn)AES有若干模式。其中的CBC模式因為其安全性而被TLS(就是https的加密標準)和IPSec(win采用的)作為技術(shù)標準。簡單地說,CBC使用密碼和salt(起擾亂作用)按固定算法(md5)產(chǎn)生key和iv。然后用key和iv(初始向量,加密第一塊明文)加密(明文)和解密(密文)。
下面介紹python實現(xiàn)的AES加密解密實例,這里采用CBC模式,用到了pycrypto模塊
安裝:
pip install Crypto pip install binascii
實現(xiàn):
#!/usr/bin/env python # -*- coding:utf-8 -*- #@author: rui.xu #這里使用pycrypto?庫 #按照方法:easy_install pycrypto? from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class prpcrypt(): def __init__(self,key): self.key = key self.mode = AES.MODE_CBC #加密函數(shù),如果text不足16位就用空格補足為16位, #如果大于16當時不是16的倍數(shù),那就補足為16的倍數(shù)。 def encrypt(self,text): cryptor = AES.new(self.key,self.mode,b'0000000000000000') #這里密鑰key 長度必須為16(AES-128), #24(AES-192),或者32 (AES-256)Bytes 長度 #目前AES-128 足夠目前使用 length = 16 count = len(text) if count < length: add = (length-count) #\0 backspace text = text + ('\0' * add) elif count > length: add = (length-(count % length)) text = text + ('\0' * add) self.ciphertext = cryptor.encrypt(text) #因為AES加密時候得到的字符串不一定是ascii字符集的,輸出到終端或者保存時候可能存在問題 #所以這里統(tǒng)一把加密后的字符串轉(zhuǎn)化為16進制字符串 return b2a_hex(self.ciphertext) #解密后,去掉補足的空格用strip() 去掉 def decrypt(self,text): cryptor = AES.new(self.key,self.mode,b'0000000000000000') plain_text = cryptor.decrypt(a2b_hex(text)) return plain_text.rstrip('\0') if __name__ == '__main__': pc = prpcrypt('keyskeyskeyskeys') #初始化密鑰 import sys e = pc.encrypt(sys.argv[1]) #加密 d = pc.decrypt(e) #解密 print "加密:",e print "解密:",d
ValueError: IV must be 16 bytes long windows下默認會報這個錯,
cryptor = AES.new(self.key,self.mode,b'0000000000000000')
實例化后面加上后面那個就Ok了
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password
迅雷、快車、旋風URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder
在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
python 正則表達式貪婪模式與非貪婪模式原理、用法實例分析
這篇文章主要介紹了python 正則表達式貪婪模式與非貪婪模式原理、用法,結(jié)合實例形式詳細分析了python 正則表達式貪婪模式與非貪婪模式的功能、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下2019-10-10python數(shù)據(jù)庫開發(fā)之MongoDB安裝及Python3操作MongoDB數(shù)據(jù)庫詳細方法與實例
這篇文章主要介紹了python數(shù)據(jù)庫開發(fā)之MongoDB安裝及Python3操作MongoDB數(shù)據(jù)庫詳細方法與實例,需要的朋友可以參考下2020-03-03如何把外網(wǎng)python虛擬環(huán)境遷移到內(nèi)網(wǎng)
這篇文章主要介紹了如何把外網(wǎng)python虛擬環(huán)境遷移到內(nèi)網(wǎng),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05Python機器學(xué)習(xí)NLP自然語言處理基本操作詞袋模型
本文是Python機器學(xué)習(xí)NLP自然語言處理系列文章,帶大家開啟一段學(xué)習(xí)自然語言處理 (NLP) 的旅程。本篇文章主要學(xué)習(xí)NLP自然語言處理基本操作之詞袋模型2021-09-09用python求一個數(shù)組的和與平均值的實現(xiàn)方法
今天小編就為大家分享一篇用python求一個數(shù)組的和與平均值的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06