2009-05-12 20 views

Antwort

-1

Wenn es um die Sicherheit kommt nichts schlägt die Dokumentation zu lesen.

http://chandlerproject.org/bin/view/Projects/MeTooCrypto

Auch wenn ich die Zeit zu verstehen und den perfekten Code für Sie und Paste zu kopieren, würden Sie keine Ahnung haben, wenn ich einen guten Job gemacht hat oder nicht. Nicht sehr hilfreich, ich weiß, aber ich wünsche Ihnen viel Glück und sichere Daten.

+0

Diese Verbindung ist nicht mehr gültig. –

13

Die Dokumentation von M2Crypto ist schrecklich. Manchmal kann die OpenSSL-Dokumentation (m2crypto Wraps OpenSSL) helfen. Am besten schauen Sie sich die M2Crypto Unit Tests an - http://svn.osafoundation.org/m2crypto/trunk/tests/test_evp.py - suchen Sie nach der test_AES() Methode.

+0

+1 ... Joe, diese Antwort wurde heute sehr geschätzt, als ich an einem Tierprojekt arbeitete. Ich fing an zu denken, dass ich verrückt war, wenn ich mir die M2Crypto-Dokumente anschaute und, äh, einfach kommentierte epydoc API; Sicher, ich habe etwas offensichtlich übersehen! Danke für die Wiederherstellung meines Glaubens. –

2

Werfen Sie einen Blick auf m2secret:

Kleines Dienstprogramm und Modul für Verschlüsselungs- und Entschlüsselungsdaten symmetrischen Schlüsselalgorithmen verwenden. Standardmäßig verwendet 256-Bit-AES (Rijndael) mit CBC, , aber einige Optionen sind konfigurierbar. PBKDF2-Algorithmus zur Ableitung des Schlüssels vom Passwort.

1
def encrypt_file(key, in_filename, out_filename,iv): 
    cipher=M2Crypto.EVP.Cipher('aes_256_cfb',key,iv, op=1) 
    with open(in_filename, 'rb') as infile: 
     with open(out_filename, 'wb') as outfile: 
      outfile.write(b) 
      while True: 
      buf = infile.read(1024) 
      if not buf: 
       break 
      outfile.write(cipher.update(buf)) 

      outfile.write(cipher.final()) 
      outfile.close() 
     infile.close() 

def decrypt_file(key, in_filename, out_filename,iv): 
    cipher = M2Crypto.EVP.Cipher("aes_256_cfb",key , iv, op = 0) 
    with open(in_filename, 'rb') as infile: 
     with open(out_filename, 'wb') as outfile: 
      while True: 
      buf = infile.read(1024) 
      if not buf: 
       break 
      try: 
       outfile.write(cipher.update(buf)) 
      except: 
       print "here" 
      outfile.write(cipher.final()) 
      outfile.close() 
     infile.close() 
1

Ich verwende folgenden Wrapper um m2crypto (entlehnt aus cryptography.io):

import os 
import base64 
import M2Crypto 


class SymmetricEncryption(object): 

    @staticmethod 
    def generate_key(): 
     return base64.b64encode(os.urandom(48)) 

    def __init__(self, key): 
     key = base64.b64decode(key) 
     self.iv = key[:16] 
     self.key = key[16:] 

    def encrypt(self, plaintext): 
     ENCRYPT = 1 
     cipher = M2Crypto.EVP.Cipher(alg='aes_256_cbc', key=self.key, iv=self.iv, op=ENCRYPT) 
     ciphertext = cipher.update(plaintext) + cipher.final() 
     return base64.b64encode(ciphertext) 

    def decrypt(self, cyphertext): 
     DECRYPT = 0 
     cipher = M2Crypto.EVP.Cipher(alg='aes_256_cbc', key=self.key, iv=self.iv, op=DECRYPT) 
     plaintext = cipher.update(base64.b64decode(cyphertext)) + cipher.final() 
     return plaintext 
Verwandte Themen