2009-05-12 13 views

Odpowiedz

-1

Jeśli chodzi o bezpieczeństwo nic nie przebije czytanie dokumentacji.

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

Nawet gdybym wziął czas, aby zrozumieć i zrobić idealne kod do kopiowania i wklejania, że ​​nie masz pojęcia, czy mam dobrą robotę, czy nie. Niezbyt pomocna, wiem, ale życzę ci szczęścia i bezpiecznych danych.

+0

Ten link nie jest już ważna. –

13

Dokumentacja M2Crypto jest okropna. Czasem może pomóc dokumentacja OpenSSL (m2crypto opakowuje OpenSSL). Najlepiej jest spojrzeć na testy jednostki M2Crypto - http://svn.osafoundation.org/m2crypto/trunk/tests/test_evp.py - poszukaj metody test_AES().

+0

+1 ... joe, ta odpowiedź została doceniona dzisiaj, gdy pracowałem nad projektem dla zwierząt domowych. Zaczynałem myśleć, że byłem szalony, patrząc na dokumenty M2Crypto i, um, rzadko komentowane API epydoc; na pewno brakowało mi czegoś oczywistego! Dziękuję za przywrócenie mojej wiary. –

2

Spójrz na m2secret:

małe narzędzie i moduł dla szyfrowania i deszyfrowania danych przy użyciu symetryczny klucz algorytmów. Domyślnie używa 256-bitowego AES (Rijndael) przy użyciu CBC, , ale niektóre opcje można konfigurować. Algorytm PBKDF2 użyty do wyprowadzenia klucza z hasła.

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

używam następujący otoki wokół M2Crypto (pożyczoną od 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