Я пытаюсь расшифровать на Crypto JS и зашифровать в PyCrypto.
Я видел этот отличный ответ, который работает как шарм, единственная проблема в том, что он настраивает PyCrypto для работы с Crypto JS, и я предпочитаю определять правила того, как я ожидаю ввод, и вносить как можно меньше корректировок в PyCrypto с его значениями по умолчанию.
Я подумал попросить отправить iv и с Zero Padding.
Я написал следующее в JS (ES6):
const iv = CryptoJS.enc.Hex.parse("1234567889012345");
const key = 'aR1h7EefwlPNVkvTHwfs6w=='
const encrypted = AES.encrypt(
password,
key,
{
iv,
padding: CryptoJS.pad.NoPadding
}
);
const payload = {password: encrypted, iv: iv};
// make HTTPS POST call
Python:
def decrypt_from_cryptoJS(encrypted, iv):
key = "aR1h7EefwlPNVkvTHwfs6w==".encode()
aes = AES.new(key.encode(), AES.MODE_CBC, iv)
encrypted = aes.decrypt(base64.b64decode(encrypted)))
Однако я получаю ValueError: raise TypeError("Object type %s cannot be passed to C code" % type(data))
Если я попытаюсь создать VI с помощью: CryptoJS.lib.WordArray.random(16)
и отправить его с помощью метода toString () JS, я получу:
Incorrect IV length (it must be 16 bytes long)
для запуска AES
Как я могу расшифровать в Crypto JS с минимальными настройками кода в PyCrypto? Я не уверен, что я даже иду по правильному пути ..