Во-первых, большинство примеров, которые я нашел, жестко закодированы ключом и IV. Итак, что я делаю, это записываю его в зашифрованные байты. Это сделает мои зашифрованные данные больше. Есть ли лучший способ?
Очевидно, что вы не должны записывать ключ в незащищенный поток, так как ключ должен быть передан или установлен заранее и должен оставаться в секрете. Это совместное использование секретного ключа может быть выполнено многими способами, начиная от согласования ключа до получения ключа, прерывания и т. Д. И т. Д.
Кроме того, я не использую пароль. Можно ли использовать пароль для создания пользовательского ключа? И если да, то как я узнаю, как долго должен быть этот ключ?
Это возможно. Однако помните, что пароли часто не так надежны, поэтому, если можно избежать шифрования на основе паролей (PBE), это может быть хорошей идеей.
Если вы получаете ключ из пароля, вы должны использовать функцию получения ключа на основе пароля (также иногда называемую хэшем пароля). В C # есть реализация PBKDF2 (плохо) под названием Rfc2898DeriveBytes
. К настоящему моменту это тоже не очень современно, но этого должно быть достаточно - если вы все равно установите достаточно высокий счетчик итераций.
Когда вы получаете ключ из пароля, запомненного человеком, тогда 128 бит - это достаточно. Почти невозможно найти ключ проще, чем пароль, который использовался для его получения.