python M 2 CryptoモジュールによるAES暗号化

1682 ワード

AES(英語:Advanced Encryption Standard、中国語:高度な暗号化規格)は、ブロック暗号化規格である.AESは、元のデータを複数の4つに分割する×4バイトマトリクスは、予め定義された鍵によって、各バイトマトリクスの各バイトを異種化、置換、シフト、および線形変換することによって暗号化の目的を達成するために処理される.鍵長は、128192ビットまたは256ビットであってもよい.
次はPython M 2 Cryptoライブラリを利用して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アルゴリズム暗号化デフォルト充填モードはpkcs 5である.
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 

詳細については、次のリンクを参照してください.http://ijecorp.blogspot.com/2013/08/python-m2crypto-aes-encrypt-decrypt.html