Python使用M2Crypto模塊進行AES加密

jopen 10年前發布 | 21K 次閱讀 Python Python開發

      AES(英文:Advanced Encryption Standard,中文:高級加密標準),是一種區塊加密標準。AES將原始數據分成多個4×4字節矩陣來處理,通過預先定義的密鑰對每個字節矩陣中的每個字節進行異或、替換、移位以及線性變換操作來達到加密的目的。密鑰長度可以是128,192或256比特。
    下面是一個利用Python M2Crypto庫,并使用aes_128_ecb算法進行加密和解密的例子。首先介紹一下幾個關鍵的點:
1、iv(Initialization vector),即初始化向量,用于避免相同的數據多次加密都產生相同的密文。最大長度為16字節,超出16字節部分會被忽略,最好是隨機產生以增加加密的強度。
2、ECB (Electronic codebook,ECB),它會對每個4×4字節矩陣都用同一個密鑰進行加密,而且沒有使用 IV。優點是每個字節矩陣都可以獨立進行加密,因此可以同時對每個字節矩陣進行加密;缺點是對于相關的數據,加密之后的密文都是一樣的。
3、Padding,由于AES是以4×4字節矩陣作為單位進行處理,因為待加密數據必須是16的倍數,若不足16的倍數,將會進行填充操作。aes_128_ecb算法加密默認填充模式是pkcs5。

    from M2Crypto.EVP import Cipher
from M2Crypto import m2
from M2Crypto import util

ENCRYPT_OP = 1 # 加密操作  
DECRYPT_OP = 0 # 解密操作  

iv = '\0' * 16 # 初始化變量,對于aes_128_ecb算法無用  
PRIVATE_KEY = 'dd7fd4a156d28bade96f816db1d18609' # 密鑰  

def Encrypt(data):  
  '使用aes_128_ecb算法對數據加密'  
  cipher = Cipher(alg = 'aes_128_ecb', key = PRIVATE_KEY, iv = iv, op = ENCRYPT_OP)  
  buf = cipher.update(data)  
  buf = buf + cipher.final()  
  del cipher  
  # 將明文從字節流轉為16進制  
  output = ''  
  for i in buf:  
    output += '%02X' % (ord(i))  
  return output  

def Decrypt(data):  
  '使用aes_128_ecb算法對數據解密'  
  # 將密文從16進制轉為字節流  
  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   </pre>更多內容,可參考以下鏈接:<br />

http://ijecorp.blogspot.com/2013/08/python-m2crypto-aes-encrypt-decrypt.html來自:http://blog.csdn.net/shudou/article/details/38903363

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!