pythonが実現したAES双方向対称暗号解読と用法分析

3306 ワード

本明細書の例では、pythonによって実装されるAES双方向対称暗号化の復号化と使用法について説明する.皆さんの参考にしてください.具体的には以下の通りです.
高度な暗号化規格(Advanced Encryption Standard,AES)は、暗号学ではRijndael暗号化法とも呼ばれ、米連邦政府が採用しているブロック暗号化規格である.この基準は従来のDESの代わりに用いられ,多方面にわたって分析され,世界中で広く用いられている.5年間の選考プロセスを経て、高級暗号化規格は米国国家規格と技術研究院(NIST)が2001年11月26日にFIPS PUB 197に発表し、2002年5月26日に有効な規格となった.2006年、高度な暗号化基準は対称鍵暗号化で最も流行しているアルゴリズムの一つとなっている.
AESは基本アルゴリズムにすぎず,AESを実現するにはいくつかのモードがある.その中のCBCモードはそのセキュリティのためTLS(httpの暗号化規格)とIPSec(winが採用した)に技術規格とされている.簡単に言えば、CBCは、固定アルゴリズム(md 5)に従ってkeyおよびivを生成するために、パスワードおよびsalt(スクランブル)を使用する.次いでkeyおよびiv(初期ベクトル、第1ブロックの明文を暗号化)で暗号化(明文)および復号化(密文)する.
次にpythonが実装したAES暗号解読の例を紹介し、ここではCBCモードを採用し、pycryptoモジュールを用いた.
インストール:

pip install Crypto
pip install binascii


実装:

#!/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
  #    ,  text  16        16 ,
  #    16    16   ,     16   。
  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    ,                 
    #                 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:暗号解読に興味のある方は、当駅のオンラインツールも参考にしてください.
MD 5オンライン暗号化ツール:http://tools.jb51.net/password/CreateMD5Password
迅雷、急行、サイクロンURL暗号化/復号ツール:http://tools.jb51.net/password/urlrethunder
オンラインハッシュ/ハッシュアルゴリズム暗号化ツール:http://tools.jb51.net/password/hash_encrypt
オンラインMD 5/hash/SAH-1/SAH-2/SAH-256/SAH-512/SAH-3/RIPEMD-160暗号化ツール:http://tools.jb51.net/password/hash_md5_sha
オンラインsha 1/sha 224/sha 256/sha 384/sha 512暗号化ツール:http://tools.jb51.net/password/sha_encode
Pythonに関する詳細について興味のある読者は、「Python符号化操作テクニックまとめ」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python Socketプログラミングテクニックまとめ」、「Python関数使用テクニックまとめ」、「Python文字列操作テクニックまとめ」、「Python入門と進級経典チュートリアル」、「Pythonファイルとディレクトリ操作テクニックまとめ」などのトピックを参照してください.
ここではPythonプログラムの設計に役立つことを願っています.