2009-05-12 21 views
6

Alguien me puede proporcionar el código para cifrar/descifrar usando M2Crypto AES256 CBC usando PythonM2Crypto cifrar/descifrar usando AES256

+0

Puede echar un vistazo a [en este mensaje] [1]. [1]: http://stackoverflow.com/questions/5003626/problem-with-m2cryptos-aes – ohe

Respuesta

-1

Cuando se trata de seguridad nada late leer la documentación.

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

Incluso si tomaba el tiempo para comprender y hacer que el código perfecto para copiar y pegar, que tendrían ni idea de si lo hiciera un buen trabajo o no. No es muy útil, lo sé, pero le deseo suerte y datos seguros.

+0

Ese vínculo ya no es válida. –

13

La documentación de M2Crypto es terrible. En ocasiones, la documentación de OpenSSL (m2crypto wraps OpenSSL) puede ayudar. Su mejor opción es mirar las pruebas de la unidad M2Crypto - http://svn.osafoundation.org/m2crypto/trunk/tests/test_evp.py - busque el método test_AES().

+0

+1 ... joe, esta respuesta fue muy apreciada hoy en día mientras trabajaba en un proyecto de mascotas. Estaba empezando a pensar que estaba loco cuando miraba los documentos de M2Crypto y, um, la API epydoc escasamente comentada; seguramente, me faltaba algo obvio! Gracias por restaurar mi fe –

2

Tome un vistazo a m2secret:

Pequeña utilidad y el módulo de cifrar y descifrar datos utilizando algoritmos de clave simétrica. De forma predeterminada, usa AES de 256 bits (Rijndael) usando CBC, pero algunas opciones son configurables. Algoritmo PBKDF2 utilizado para derivar la clave de la contraseñ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

utilizo siguiente envoltura alrededor M2Crypto (tomado de 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