Pythonはaes暗号解読の様々な方法の解析を実現します。


引用子:
windowsでpython 3はpycryptdemoモジュールを使ってAs暗号解読を実現します。Aes暗号化には様々な方法があります。自分でインターネットを利用して知ることができます。AESは16ビットごとに暗号化され、keyとviは16ビットであることを保証します。余計なことを言わないで、直接コードを入れてください。

import base64
from Crypto.Cipher import AES
from binascii import b2a_hex,a2b_hex
 
 
class PrpCrypt(object):
  def __init__(self,key,iv):
    self.key=key.encode('utf-8')
    self.mode=AES.MODE_CBC
    self.iv=iv.encode('utf-8')
 
  def pad_byte(self, b):
    '''
    1       bytes     16   
    2        bytes    0     
    3              *      ,         bytes
    4          
    :param b: bytes     
    :return:       bytes  
    '''
    bytes_num_to_pad = AES.block_size - (len(b) % AES.block_size)
    # python3    unicode  
    #    byte_to_pad            unicode                16   ,  bytes               
    #                    ,          ,        
    #            
    byte_to_pad = bytes([bytes_num_to_pad])
    padding = byte_to_pad * bytes_num_to_pad
    padded = b + padding
    return padded
 
  def encrypt(self,text):
    '''
    1    aes  
    2     text  bytes
    3     text  
    4   encrypt        
    5      16  ,  16   base64  ,       base64  
         4       aes  ,             ,           4  
 
    :param text:
    :return:
    '''
    cryptor = AES.new(self.key,self.mode,self.iv)
    text = text.encode('utf-8')
    text = self.pad_byte(text)
    self.ciphertext = cryptor.encrypt(text)
    cryptbase64 = base64.b64encode(b2a_hex(self.ciphertext)).decode('utf8')
    return cryptbase64
 
 
  def decrypt(self,text):
    '''
                
    1       ,    
    2 base64  
    3   aes  
    4 16   2  
    5   decrypt        bytes    
 
    :param text:
    :return:           
    '''
    unpad = lambda s: s[:-ord(s[len(s) - 1:])]
    base64Str = base64.b64decode(text.encode('utf8'))
    cryptor = AES.new(self.key, self.mode, self.iv)
    aesStr = cryptor.decrypt(a2b_hex(base64Str))
    aesStr = str(unpad(aesStr), encoding='utf8')
    return aesStr
if __name__ == '__main__':
  data='sadfsasdgsdfgdsf123'
  pc=PrpCrypt('daajanbaqa654321','1234567890123456')
  redata = pc.encrypt(data)
  print(redata)
  result=pc.decrypt(redata)
  print(result)
考え方:
ここで先輩の言葉を引用すると、考えが重要です。具体的にどのように実現するかは、むしろその次です。
1 Aesは16ビットで暗号化されていますので、keyとivは両方とも言えます。直接に16ビットに設定することができます。
2着信したデータと転送したデータは一定の長さではないので、暗号化する時は16桁の倍数かどうかを判断し、足りなければ補完します。
3問題はデータを持ってからどうやってどこで切り取りますか?
1着信データを16桁で判断すると、何桁を補ったらいいか分かります。この数字をbytesタイプに変えます。python 3ではデフォルトのunicodeコードです。
2ペアがデータを取ったら、最後の方を切り取り、unicodeによって対応数字に変えます。相手はどこから切り取りますか?
3 unicodeとutf 8の関係を見て、utf 8はunicodeの実現の一つの方式です。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。