недопустимая ошибка длины ключа AES

Обязательно всегда инициализируйте Ваши переменные перед использованием их! Когда я только что запустил с C, который вызвал меня много головных болей.

25
задан silverkid 19 November 2009 в 03:52
поделиться

2 ответа

Используйте SecretKeyFactory для извлечения байтов ключа из пароля. Вы можете увидеть подробный пример здесь. Обратите внимание, что вам нужно указать длину ключа 128 бит вместо 256 бит, как показано в этом примере.

Следующая проблема, с которой вы столкнетесь, заключается в том, что вы не указали схему заполнения. Если ваши сообщения не кратны 16 байтам (размер блока AES), это вызовет ошибку. Используйте PKCS5Padding, как показано в примере.

Использование режима CBC для шифра потребует выбора нового вектора инициализации для каждого сообщения. Этот уникальный IV должен быть отправлен вместе с зашифрованным сообщением получателю.

Попытка выполнить криптографию без полного понимания изложенных здесь концепций (и многих других) может привести к небезопасной системе.

22
ответ дан 28 November 2019 в 21:37
поделиться

Обычно вы не можете использовать произвольную длину ключа (например, как вы делаете здесь со словом «supernova») для блочного шифра, такого как AES. Вы должны использовать поддерживаемую длину ключа (128, 192, 256 и т.д.), соответствующую выбранному вами алгоритму.

Один из распространенных способов сделать это - хешировать парольную фразу (например, через SHA) и извлечь первые N байтов. В любом случае это лучше, так как это позволяет вам «добавить к паролю» значение инициализации, так что никакие «ключи» двух пользователей не будут идентичными, даже если их парольные фразы совпадают. Если вас действительно интересует этот материал, то основная работа - Прикладная криптография Брюса Шнайера .

Подробнее о практической реализации см.

10
ответ дан 28 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: