Может ли кто-нибудь предоставить мне код для шифрования/дешифрования с использованием m2crypto aes256 CBC с использованием Python
M2Crypto шифрует/дешифрует с использованием AES256
Ответы (4)
Документация M2Crypto ужасна. Иногда может помочь документация OpenSSL (m2crypto обертывает OpenSSL). Лучше всего посмотреть модульные тесты M2Crypto -- https://gitlab.com/m2crypto/m2crypto/blob/master/tests/test_evp.py — найдите метод test_AES()
.
Взгляните на m2secret:
Небольшая утилита и модуль для шифрования и дешифрования данных с использованием алгоритмов с симметричным ключом. По умолчанию используется 256-битный AES (Rijndael) с использованием CBC, но некоторые параметры можно настроить. Алгоритм PBKDF2, используемый для получения ключа из пароля.
Я использую следующую обертку вокруг M2Crypto (позаимствовано из 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
Когда дело доходит до безопасности, ничто не сравнится с чтением документации.
http://chandlerproject.org/bin/view/Projects/MeTooCrypto
Даже если бы я потратил время на то, чтобы понять и сделать идеальный код, который вы могли бы скопировать и вставить, вы бы не поняли, хорошо я поработал или нет. Не очень полезно, я знаю, но я желаю вам удачи и безопасных данных.