Как алгоритм AES CBC проверяет правильность ключа, повернутого паролем? - PullRequest
0 голосов
/ 16 октября 2018

Я использую этот класс для шифрования файла или байтового массива с использованием алгоритма AES / CBC.

Однако я не понимаю, как этот алгоритм реализован в Javaпроверить, верен ли пароль повернутым ключом или нет.При вводе неверного пароля выдается javax.crypto.BadPaddingException.Вот сообщение об ошибке:

Учитывая, что последний блок заполнен неправильно.Такие проблемы могут возникнуть, если при расшифровке используется плохой ключ.

Сохраняет ли этот алгоритм ключ в зашифрованном документе?Что такое вектор инициализации и как Java продолжает проверять, является ли заданный пароль повернутым ключом истинным или нет?Что именно происходит в процессе расшифровки?

1 Ответ

0 голосов
/ 16 октября 2018

Код указывает, что вы используете заполнение PKCS5 (с CIPHER_SPEC = "AES/CBC/PKCS5Padding").Это означает, что 1–16 байтов заполняются в конце ваших чистых данных перед шифрованием.Это заполнение гарантирует, что данные будут соответствовать размеру блока AES (16 байт) перед шифрованием.Заполнение построено таким образом, что легко определить, что это заполнение (количество дополненных байтов - это то, что дополняется ... например, если требуется 5 байтов, заполнение равно 05 05 05 05 05).

Если вы расшифровываете с неправильным ключом, вы получаете случайные данные, которые в большинстве случаев также дают вам неверный отступ.Поскольку заполнение недопустимо, шифр не знает, где заканчиваются данные, и дает вам BadPaddingException.

...