Попытка использовать расшифровку PyBryptodome AES ECB со смещением - PullRequest
0 голосов
/ 25 апреля 2020

В контексте этого я преобразую файл java в python и выполняю последнюю операцию. Я нахожусь примерно в 200 LO C, так что это делает его намного большим краем сиденья ...

В любом случае, в java операция:

Cipher cipher = Cipher.getInstance("AES/ecb/nopadding");
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keys[i], "AES"));

//doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
cipher.doFinal(save, saveOffset, 16, save, saveOffset);

In python У меня есть это:

from Crypto.Cipher import AES
cipher = AES.new(bytes(keys[i]), AES.MODE_ECB)
cipher.decrypt(?????)

Это взято из пакета в decrypt ():

:Parameters:
  ciphertext : bytes/bytearray/memoryview
    The piece of data to decrypt.
    The length must be multiple of the cipher block length.
:Keywords:
  output : bytearray/memoryview
    The location where the plaintext must be written to.
    If ``None``, the plaintext is returned.
:Return:
  If ``output`` is ``None``, the plaintext is returned as ``bytes``.
  Otherwise, ``None``.

Как вы видите, .decrypt () на самом деле не имеет вход для смещений, но мне было интересно, есть ли способ обойти это?

Вот почему я решил опубликовать на SO, смогу ли я отправить:

temp_bytes = save[offset]
temp_decrypt = cipher.decrypt(temp_bytes)
save[offset] = temp_decrypt

Или когда расшифровывает ли он весь файл как контекст, и я получу неправильный вывод? Я хотел бы просто сделать это и протестировать его, но на выходе просто gibberi sh, что мне придется написать другую программу для анализа (другой проект java to python).

1 Ответ

0 голосов
/ 25 апреля 2020

В итоге получилось:

save[saveOffset:saveOffset+16] = cipher.decrypt(save[saveOffset:saveOffset+16])

Не ожидал, что это так легко сработает

...