Шифрование с использованием AES-256 и вектора инициализации

У меня есть вопрос, связанный с использованием вектора инициализации в шифровании AES. Я ссылаюсь на следующие статьи / сообщения, чтобы встроить шифрование в свою программу:

[1] 256-битное шифрование AES на основе пароля Java
[2] http://gmailassistant.sourceforge.net/src/org/freeshell/zs/common/Encryptor.java.html

Первоначально я следовал решению erickson от первая ссылка, но, насколько я могу судить, PBKDF2WithHmacSHA1 не поддерживается в моей реализации. Итак, я обратился ко второй ссылке, чтобы получить представление о моем собственном итеративном создании хэша SHA-256.

Мой вопрос заключается в том, как создается IV. Одна реализация ([1]) использует методы из класса Cypher для получения IV, а другая ([2]) использует вторые 16 байтов хэша в качестве IV. Проще говоря, в чем разница и что лучше с точки зрения безопасности? Я немного смущен происхождением и использованием IV (я понимаю, для чего они используются, но не более тонкие различия), поэтому любые разъяснения также очень приветствуются.

Я заметил, что вторая ссылка использует AES-128, а не AES-256, что подсказывает мне, что мне придется перейти на SHA-512, если я хочу использовать этот метод. Это кажется нежелательным требованием, так как пароль пользователя должен быть на 16 символов длиннее, чтобы обеспечить удаленно безопасный хэш, а это приложение предназначено для мобильного телефона.

Исходный код доступен по запросу, хотя он все еще неполный .

Заранее благодарю.

10
задан Community 23 May 2017 в 12:09
поделиться