Нет смысла инициализировать ключевой файл пустым байтовым массивом.GetBytes возвращает новый байтовый массив, который заменяет исходный, и он будет настолько большим, насколько это необходимо для кодирования всего ввода.
Чтобы получить только восемь байтов кодировки, почему бы вам просто не предоставить первыйвосемь символов?Все они являются ASCII, поэтому они будут занимать один байт каждый:
byte[] keyfile = UTF8Encoding.UTF8.GetBytes(keyValue.Substring(0, 8));
Более того, если вы используете keyText в качестве пароля для синтеза ключа шифрования, это действительно плохая идея.Вы просто отбрасываете любые символы пароля после первых восьми.Вместо этого используйте некоторую форму криптографического хэша для преобразования паролей в ключи.Я только что заметил Ответ Хенка Холтермана указывает на соответствующий API.