Qualcuno mi può fornire il codice per cifrare/decifrare usando M2Crypto AES256 CBC utilizzando PythonM2Crypto Encrypt/Decrypt utilizzando AES256
risposta
Quando si tratta di sicurezza niente batte la lettura della documentazione.
http://chandlerproject.org/bin/view/Projects/MeTooCrypto
Anche se ho preso il tempo di capire e rendere il codice perfetto per voi di copiare e incollare, si avrebbe la minima idea se ho fatto un buon lavoro o no. Non molto utile, lo so, ma ti auguro buona fortuna e dati sicuri.
Tale nesso non è più valida. –
La documentazione di M2Crypto è terribile. A volte può essere d'aiuto la documentazione di OpenSSL (m2crypto wraps OpenSSL). La soluzione migliore è guardare i test dell'unità M2Crypto - http://svn.osafoundation.org/m2crypto/trunk/tests/test_evp.py - cercare il metodo test_AES()
.
+1 ... joe, questa risposta è stata molto apprezzata oggi mentre stavo lavorando a un progetto per animali domestici. Stavo cominciando a pensare che ero pazzo quando guardavo i documenti di M2Crypto e, um, commentavo scarsamente API epydoc; sicuramente, mi mancava qualcosa di ovvio! Grazie per aver ripristinato la mia fede. –
Date un'occhiata a m2secret:
Piccolo programma di utilità e il modulo per crittografia e decrittografia dei dati utilizzando algoritmi a chiave simmetrica. Per impostazione predefinita, utilizza AES (Rijndael) a 256 bit utilizzando CBC, ma alcune opzioni sono configurabili. Algoritmo PBKDF2 utilizzato per derivare la chiave dalla password.
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()
Io uso seguente wrapper M2Crypto (preso in prestito da 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
Si può avere uno sguardo un [a questo post] [1]. [1]: http://stackoverflow.com/questions/5003626/problem-with-m2cryptos-aes – ohe