Шифруется так:
CryptoJS.AES.encrypt('Plain Text', 'password').toString()
Результат:
U2FsdGVkX1/lXDct6Gdc+rxKuhSvS6035ZYKeh1DLaY=
Расшифровать средствами того же CryptoJS всё просто. Вопрос в том, как его расшифровать средствами Crypto.Cipher.AES.
Из моих наблюдений, зашифрованный текст имеет интересную структуру, в частности префикс
Salted__
и дальше на сколько я понимаю идут n байтов хэша. А затем уже идёт сам зашифрованный текст.
Мой вариант:
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import unpad
from Crypto.Cipher import AES
from base64 import b64decode
#CBC mode with random IV
iv = get_random_bytes(16)
def decrypt(enc, key, iv):
enc = b64decode(enc)
cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, b64decode(iv))
return unpad(cipher.decrypt(enc), 16)
Но проблема в том, что CryptoJS не использует выравнивание на сколько я понимаю.
Так же интересен вопрос, как текст зашифровать так же, как и CryptoJS.