在Python中使用M2Crypto模塊實(shí)現(xiàn)AES加密的教程
AES(英文:Advanced Encryption Standard,中文:高級(jí)加密標(biāo)準(zhǔn)),是一種區(qū)塊加密標(biāo)準(zhǔn)。AES將原始數(shù)據(jù)分成多個(gè)4×4字節(jié)矩陣來處理,通過預(yù)先定義的密鑰對(duì)每個(gè)字節(jié)矩陣中的每個(gè)字節(jié)進(jìn)行異或、替換、移位以及線性變換操作來達(dá)到加密的目的。密鑰長度可以是128,192或256比特。
下面是一個(gè)利用Python M2Crypto庫,并使用aes_128_ecb算法進(jìn)行加密和解密的例子。首先介紹一下幾個(gè)關(guān)鍵的點(diǎn):
1、iv(Initialization vector),即初始化向量,用于避免相同的數(shù)據(jù)多次加密都產(chǎn)生相同的密文。最大長度為16字節(jié),超出16字節(jié)部分會(huì)被忽略,最好是隨機(jī)產(chǎn)生以增加加密的強(qiáng)度。
2、ECB (Electronic codebook,ECB),它會(huì)對(duì)每個(gè)4×4字節(jié)矩陣都用同一個(gè)密鑰進(jìn)行加密,而且沒有使用 IV。優(yōu)點(diǎn)是每個(gè)字節(jié)矩陣都可以獨(dú)立進(jìn)行加密,因此可以同時(shí)對(duì)每個(gè)字節(jié)矩陣進(jìn)行加密;缺點(diǎn)是對(duì)于相關(guān)的數(shù)據(jù),加密之后的密文都是一樣的。
3、Padding,由于AES是以4×4字節(jié)矩陣作為單位進(jìn)行處理,因?yàn)榇用軘?shù)據(jù)必須是16的倍數(shù),若不足16的倍數(shù),將會(huì)進(jìn)行填充操作。aes_128_ecb算法加密默認(rèn)填充模式是pkcs5。
from M2Crypto.EVP import Cipher from M2Crypto import m2 from M2Crypto import util ENCRYPT_OP = 1 # 加密操作 DECRYPT_OP = 0 # 解密操作 iv = '\0' * 16 # 初始化變量,對(duì)于aes_128_ecb算法無用 PRIVATE_KEY = 'dd7fd4a156d28bade96f816db1d18609' # 密鑰 def Encrypt(data): '使用aes_128_ecb算法對(duì)數(shù)據(jù)加密' cipher = Cipher(alg = 'aes_128_ecb', key = PRIVATE_KEY, iv = iv, op = ENCRYPT_OP) buf = cipher.update(data) buf = buf + cipher.final() del cipher # 將明文從字節(jié)流轉(zhuǎn)為16進(jìn)制 output = '' for i in buf: output += '%02X' % (ord(i)) return output def Decrypt(data): '使用aes_128_ecb算法對(duì)數(shù)據(jù)解密' # 將密文從16進(jìn)制轉(zhuǎn)為字節(jié)流 data = util.h2b(data) cipher = Cipher(alg = 'aes_128_ecb', key = PRIVATE_KEY, iv = iv, op = DECRYPT_OP) buf = cipher.update(data) buf = buf + cipher.final() del cipher return buf
- Python3加密解密庫Crypto的RSA加解密和簽名/驗(yàn)簽實(shí)現(xiàn)方法實(shí)例
- Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加簽驗(yàn)簽
- Python3.7基于hashlib和Crypto實(shí)現(xiàn)加簽驗(yàn)簽功能(實(shí)例代碼)
- python3安裝crypto出錯(cuò)及解決方法
- 下載python中Crypto庫報(bào)錯(cuò):ModuleNotFoundError: No module named ‘Crypto’的解決
- Python基于pycrypto實(shí)現(xiàn)的AES加密和解密算法示例
- python的Crypto模塊實(shí)現(xiàn)AES加密實(shí)例代碼
- python3.6 實(shí)現(xiàn)AES加密的示例(pyCryptodome)
- python Crypto模塊的安裝與使用方法
- windows下python安裝paramiko模塊和pycrypto模塊(簡單三步)
- Python使用PyCrypto實(shí)現(xiàn)AES加密功能示例
- Python使用Pycrypto庫進(jìn)行RSA加密的方法詳解
- python加密解密庫cryptography使用openSSL生成的密匙加密解密
相關(guān)文章
Python數(shù)學(xué)建模學(xué)習(xí)模擬退火算法多變量函數(shù)優(yōu)化示例解析
模擬退火算法借鑒了統(tǒng)計(jì)物理學(xué)的思想,是一種簡單、通用的啟發(fā)式優(yōu)化算法,并在理論上具有概率性全局優(yōu)化性能,因而在科研和工程中得到了廣泛的應(yīng)用2021-10-10python基于opencv實(shí)現(xiàn)人臉識(shí)別
這篇文章主要介紹了python基于opencv實(shí)現(xiàn)人臉識(shí)別的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01實(shí)例解析Python設(shè)計(jì)模式編程之橋接模式的運(yùn)用
這篇文章主要介紹了Python設(shè)計(jì)模式編程之橋接模式的運(yùn)用,橋接模式主張把抽象部分與它的實(shí)現(xiàn)部分分離,需要的朋友可以參考下2016-03-03利用 Python 實(shí)現(xiàn)隨機(jī)相對(duì)強(qiáng)弱指數(shù) StochRSI
隨機(jī)相對(duì)強(qiáng)弱指數(shù)簡稱為StochRSI,是一種技術(shù)分析指標(biāo),用于確定資產(chǎn)是否處于超買或超賣狀態(tài),也用于確定當(dāng)前市場的態(tài)勢。本篇文章小編九來為大家介紹隨機(jī)相對(duì)強(qiáng)弱指數(shù)簡稱為StochRSI,需要的朋友可以參考下面文章的具體內(nèi)容2021-09-09Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式
這篇文章主要介紹了Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05在tensorflow中實(shí)現(xiàn)去除不足一個(gè)batch的數(shù)據(jù)
今天小編就為大家分享一篇在tensorflow中實(shí)現(xiàn)去除不足一個(gè)batch的數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01