国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python進行AES加密和解密的示例代碼

2020-02-22 23:06:17
字體:
來源:轉載
供稿:網友

高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府采用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高級加密標準由美國國家標準與技術研究院(NIST)于2001年11月26日發布于FIPS PUB 197,并在2002年5月26日成為有效的標準。2006年,高級加密標準已然成為對稱密鑰加密中最流行的算法之一。---百度百科

本科的時候弄過DES加密算法加密計算機文件,而DES加密算法現在基本處于被廢棄的狀態,所以現在想試試更高級一點的。
DES加密算法可發展為3DES加密算法,后來又被升級為AES加密算法,加長了密鑰長度,也就增加了暴力破解的難度。
本次使用Python進行AES的加密解密,在ubuntu下進行:

如果沒有安裝Python,請先安裝Python和pip:

#sudo apt-get install python#sudo apt-get install python-pip

順便安裝兩個庫(有可能不叫庫,一個是關于加密解密算法的,另外一個是關于字符轉換的):

#pip install Ctypto#pip install binascii

AES擁有很多模式,而此次采用的CBC模式:通過密鑰和salt(起擾亂作用)按固定算法(md5)產生key和iv。然后用key和iv(初始向量,加密第一塊明文)加密(明文)和解密(密文)。

下面代碼實現的思想:將加密文本處理以8*16位 這樣的單位進行加密,每16個字節長度的數據加密成16個字節長度的密文。在下面代碼中,為簡化代碼,密鑰所生成的key和iv都用16位的密鑰代替,實際上其實可以不一樣,但位數能不能不一樣我就沒試了。

我在參考博客的代碼中做了一些修改,原來的代碼在需要明文為16的倍數的時候會多生成16位的空字節,有點小問題,修改之后就沒問題了。

#coding: utf8 import sys 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       #加密函數,如果text不是16的倍數【加密文本text必須為16的倍數!】,那就補足為16的倍數   def encrypt(self, text):     cryptor = AES.new(self.key, self.mode, self.key)     #這里密鑰key 長度必須為16(AES-128)、24(AES-192)、或32(AES-256)Bytes 長度.目前AES-128足夠用     length = 16     count = len(text)   if(count % length != 0) :       add = length - (count % length)   else:     add = 0     text = text + ('/0' * add)     self.ciphertext = cryptor.encrypt(text)     #因為AES加密時候得到的字符串不一定是ascii字符集的,輸出到終端或者保存時候可能存在問題     #所以這里統一把加密后的字符串轉化為16進制字符串     return b2a_hex(self.ciphertext)       #解密后,去掉補足的空格用strip() 去掉   def decrypt(self, text):     cryptor = AES.new(self.key, self.mode, self.key)     plain_text = cryptor.decrypt(a2b_hex(text))     return plain_text.rstrip('/0')   if __name__ == '__main__':   pc = prpcrypt('keyskeyskeyskeys')   #初始化密鑰   e = pc.encrypt("0123456789ABCDEF")   d = pc.decrypt(e)              print e, d   e = pc.encrypt("00000000000000000000000000")   d = pc.decrypt(e)            print e, d             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通道| 焦作市| 观塘区| 青冈县| 阜南县| 黔西县| 北碚区| 福贡县| 海阳市| 沐川县| 宿州市| 平乐县| 灵山县| 绥棱县| 环江| 瓮安县| 湄潭县| 龙海市| 晋宁县| 绥滨县| 铁力市| 云阳县| 柳州市| 乌海市| 浏阳市| 巴林左旗| 太康县| 扎鲁特旗| 汤原县| 额尔古纳市| 旬阳县| 页游| 正镶白旗| 晋州市| 襄垣县| 叶城县| 汉川市| 洛南县| 陈巴尔虎旗| 昆明市| 馆陶县|