Python AES暗号化インスタンス解析

2173 ワード

本文は主にaes暗号化技術を簡単に分析し,Pythonを用いて実現し,具体的には以下のように紹介する.
AESは、アメリカ連邦政府が採用した暗号化技術で、AESにはいくつかのモデルがあり、その中でCBCモデルは公認の安全性が最も良いモデルであり、TLSに採用されている.
暗号化と復号化の両方はkeyを決定する必要があり、keyの長さは16ビット、24ビット、32ビットのいずれかであり、それぞれ異なるアルゴリズムに対応している.
keyの長さが16ビットの場合、暗号化された明文の長さは16の整数倍でなければならないが、実際の使用では、このような巧みなことは起こりにくいため、明文を充填する必要があり、最も一般的な方法は「0」を充填し、復号化するまで待ってから、復号化された明文の右側の「0」をすべて除去することである.もし私が明文の一番右側がもともと山の0だったら、そうすれば、問題が出るのではないでしょうか.滴で、確かに問題が発生しますが、このような明文は何に使いますか.あなたは考えすぎて、このような明文は一生出会うことはできないかもしれません.
次にpythonのサンプルコードを見て、AES暗号化技術を使用して暗号化と復号化の方法を示します.

#coding=utf-8 
''''' 
                  key  
''' 
from Crypto.Cipher import AES 
from binascii import b2a_hex, a2b_hex 
 
class MyCrypto(): 
  def __init__(self, key): 
    self.key_len = len(key) 
    if not self.key_len == 16 and not self.key_len == 24 and not self.key_len == 32: 
      raise Exception("length of key is wrong") 
    self.key = key 
    self.mode = AES.MODE_CBC  #         
 
  def encrypt(self, text): 
    ''''' 
                 key      ,    ,  \0     
        16     ,         ascii         
    ''' 
    cryptor = AES.new(self.key, self.mode, self.key) 
    count = len(text) 
    add = self.key_len - (count % self.key_len) 
    text = text + ('\0' * add) 
    self.ciphertext = cryptor.encrypt(text) 
    return b2a_hex(self.ciphertext) 
 
 
  def decrypt(self, text): 
    ''''' 
            ,        \0,        \0 
    ''' 
    cryptor = AES.new(self.key, self.mode, self.key) 
    plain_text = cryptor.decrypt(a2b_hex(text)) 
    return plain_text.rstrip('\0') 
 
 
if __name__ == '__main__': 
  mc = MyCrypto("kwsy_zds20160822") 
  e = mc.encrypt("   ") 
  d = mc.decrypt(e) 
  print e,d 

まとめ
以上がPython AES暗号化の実例解析のすべてであり,皆さんの役に立つことを願っている.興味のある方は引き続き当駅の他の関連テーマを参照することができます.不足点があれば、伝言を歓迎します.友达の本駅に対する支持に感谢します!