Обязательно всегда инициализируйте Ваши переменные перед использованием их! Когда я только что запустил с C, который вызвал меня много головных болей.
Используйте SecretKeyFactory
для извлечения байтов ключа из пароля. Вы можете увидеть подробный пример здесь. Обратите внимание, что вам нужно указать длину ключа 128 бит вместо 256 бит, как показано в этом примере.
Следующая проблема, с которой вы столкнетесь, заключается в том, что вы не указали схему заполнения. Если ваши сообщения не кратны 16 байтам (размер блока AES), это вызовет ошибку. Используйте PKCS5Padding, как показано в примере.
Использование режима CBC для шифра потребует выбора нового вектора инициализации для каждого сообщения. Этот уникальный IV должен быть отправлен вместе с зашифрованным сообщением получателю.
Попытка выполнить криптографию без полного понимания изложенных здесь концепций (и многих других) может привести к небезопасной системе.
Обычно вы не можете использовать произвольную длину ключа (например, как вы делаете здесь со словом «supernova») для блочного шифра, такого как AES. Вы должны использовать поддерживаемую длину ключа (128, 192, 256 и т.д.), соответствующую выбранному вами алгоритму.
Один из распространенных способов сделать это - хешировать парольную фразу (например, через SHA) и извлечь первые N байтов. В любом случае это лучше, так как это позволяет вам «добавить к паролю» значение инициализации, так что никакие «ключи» двух пользователей не будут идентичными, даже если их парольные фразы совпадают. Если вас действительно интересует этот материал, то основная работа - Прикладная криптография Брюса Шнайера .
Подробнее о практической реализации см.