2016-10-28 3 views
0

Ich habe ein kleines Stück Code gefunden, der Dateien im AES (128bit) CBC-Modus verschlüsseln (und entschlüsseln) kann. Es funktioniert einwandfrei auch bei der Entschlüsselung, also glaubte ich, dass OpenSSL (natürlich) in der Lage sein würde, meine Dateien zu entschlüsseln, aber es scheint unmöglich zu sein. Ich erhalte denPython und OpenSSL: kann nicht entschlüsseln

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)) 

Fehler beim Lesen des Eingang Dateien“ Der Fehler ist das gleiche immer Zeit: „Fehler beim Lesen der Eingabedateien“. Wie ist es möglich? Die von mir verwendeten Befehle sind:

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

Warum funktioniert nicht?

Antwort

0

OpenSSL verwendet ein eigenes Dateiformat. Insbesondere gibt es einen Header Salted__ sowie ein Salz, das verwendet wird, um die IV abzuleiten (d. H. Die IV wird nicht direkt mit den verschlüsselten Daten gespeichert).

Sie können einige Hinweise in https://scottlinux.com/2013/10/13/how-to-encrypt-a-file-with-openssl/ und in https://crypto.stackexchange.com/questions/3298/is-there-a-standard-for-openssl-interoperable-aes-encryption finden, aber sie beschreiben nicht das tatsächliche Format.

Sie können möglicherweise den OpenSSL-Code untersuchen, um das herauszufinden, aber die Grundlinie ist, dass OpenSSL ein eigenes Dateiformat verwendet und Sie es verwenden müssen, wenn OpenSSL Ihre Dateien entschlüsseln soll.

+0

Uh ok Danke! Jetzt verstehe ich, das Grundformat war anders! Ich danke dir sehr –

Verwandte Themen