#python #encryption #aes #cbc-mode #pkcs
Вопрос:
Мы столкнулись с проблемой при перестройке логики шифрования с Java на Python:
Рабочая логика Java: приведенный ниже код возвращает JSON в клиентскую систему(где расшифровка успешно использует JSON)
message = "sampleplaintext..";
byte[] ivData = new byte[16];
byte[] keyData = new byte[16];
IvParameterSpec initializationVector = new IvParameterSpec(ivData);
SecretKey secretKey = new SecretKeySpec(keyData, "AES"); //equivalent line/logic for python ?
Cipher symmetricalCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
symmetricalCipher.init(1, secretKey, initializationVector);
byte[] encryptedBytes = symmetricalCipher.doFinal(message.getBytes());
return (new JSONObject())
.put("key", StringCodec.encodeBase64(msgkey))
.put("iv", StringCodec.encodeBase64(msgiv))
.put("messageContent", StringCodec.encodeBase64(encryptedBytes));
Логика Python с использованием библиотеки pycryptodome: приведенный ниже код возвращает JSON в клиентскую систему(где расшифровка НЕ может использовать JSON)
message = "sampleplaintext..";
data = bytes(message, 'utf-8')
msgiv = Random().read(AES.block_size)
msgkey = Random().read(AES.block_size)
AESCipherEncryptor = AES.new(msgkey, AES.MODE_CBC, msgiv)
EncryptedMSGContent = AESCipherEncryptor.encrypt(data)
ResEncrypted_string = json.dumps({
'key':base64.b64encode(msgkey).decode("utf-8"),
'iv':base64.b64encode(msgiv).decode("utf-8"),
'message':base64.b64encode(EncryptedMSGContent).decode("utf-8")
})
Мы подозреваем, что секретный ключ вызывает проблему, так как в Java он принимает объект AES Keyspec, где, поскольку мы не уверены, как сделать то же самое в python?
Комментарии:
1. Я не совсем понимаю, что мы здесь сравниваем. У вас есть фрагмент шифрования java, который использует ключ и IV, состоящий из 16 нулевых байтов. Ваш код python-это фрагмент шифрования, который, по-видимому, использует и случайный ключ и IV. Нигде нет кода расшифровки.