2016-10-28 8 views
0

AES(128bit)CBCモードでファイルを暗号化(解読)できる小さなコードが見つかりました。私は、OpenSSLが(もちろん)私のファイルを解読できるとは思っていましたが、それは不可能と思われました。私はPythonとOpenSSL:解読できない

import os, random, struct 
from Crypto.Cipher import AES 

def encrypt_file(key, in_filename, out_filename=None, chunksize=64*1024): 
    """ Encrypts a file using AES (CBC mode) with the 
     given key. 

     key: 
      16, 24 or 32 bytes long 

     in_filename: 
      Name of the input file 

     out_filename: 
      If None, '<in_filename>.enc' will be used. 

     chunksize: 
      Sets the size of the chunk which the function 
      uses to read and encrypt the file. 
      Chunksize must be divisible by 16. 
     """ 
    if not out_filename: 
      out_filename = in_filename + '.enc' 

    iv = ''.join(chr(random.randint(0, 0xFF)) for i in range(16)) 
    encryptor = AES.new(key, AES.MODE_CBC, iv) 
    filesize = os.path.getsize(in_filename) 

    with open(in_filename, 'rb') as infile: 
     with open(out_filename, 'wb') as outfile: 
      outfile.write(struct.pack('<Q', filesize)) 
      outfile.write(iv) 

      while True: 
       chunk = infile.read(chunksize) 
       if len(chunk) == 0: 
        break 
       elif len(chunk) % 16 != 0: 
        chunk += ' ' * (16 - len(chunk) % 16) 

       outfile.write(encryptor.encrypt(chunk)) 

エラー「読み取りエラー入力がファイル」と同じ、これまで時間がある取得:「読み取りエラー入力ファイル」。それはどのように可能ですか?動作しないのはなぜ

openssl aes-128-cbc -d -in test_enc.txt -out test_dec.txt 

:私が使用するコマンドはこれですか?

答えて

0

OpenSSLは独自のファイル形式を使用します。特に、Salted__ヘッダと、IVを導出するために使用される塩(すなわち、IVが暗号化されたデータと直接的には記憶されない)とがある。

https://scottlinux.com/2013/10/13/how-to-encrypt-a-file-with-openssl/https://crypto.stackexchange.com/questions/3298/is-there-a-standard-for-openssl-interoperable-aes-encryptionにヒントがありますが、実際のフォーマットは記載されていません。

OpenSSLコードを調べて調べることができますが、OpenSSLが独自のファイル形式を使用しているため、OpenSSLでファイルを復号化する必要がある場合があります。

+0

ありがとうございました!今私は理解しています、基本的なフォーマットは異なっていました!どうもありがとうございます –

関連する問題