RijndaelManaged Указанный ключ не имеет допустимого размера для этого алгоритма

 using (RijndaelManaged rijAlg = new RijndaelManaged())  
        rijAlg.Key = Key;
        rijAlg.IV = IV;

Это дает мне ошибку «Указанный ключ не является допустимым размером для этого алгоритма».

чтобы получить ключ и IV

    string checkPass = "select password from UserName where Username = '" + TBLoginUser.Text + "'";
    SqlCommand pass = new SqlCommand(checkPass, conn);
    string password = pass.ExecuteScalar().ToString();

    string checkKey = "select encKey from UserName where Username = '" + TBLoginUser.Text + "'";
    SqlCommand k = new SqlCommand(checkKey, conn);
    string key = k.ExecuteScalar().ToString();

    string checkIV = "select encIV from UserName where Username = '" + TBLoginUser.Text + "'";
    SqlCommand x = new SqlCommand(checkIV, conn);
    string iv = x.ExecuteScalar().ToString();



    byte[] keyByte = Encoding.ASCII.GetBytes(key);
    byte[] ivByte = Encoding.ASCII.GetBytes(iv);

Кто-нибудь может помочь?


person user3450582    schedule 26.02.2016    source источник
comment
Итак, каково содержимое key и iv?   -  person Artjom B.    schedule 26.02.2016
comment
Я так называю свое имя пользователя '; drop table UserName   -  person Ondrej Svejdar    schedule 26.02.2016
comment
using (RijndaelManaged rijAlg = new RijndaelManaged()) rijAlg.Key = Key; rijAlg.IV = IV; вам не хватает скобок using (..) {... }   -  person Valentin    schedule 26.02.2016
comment
Ошибка очень очевидна, размер ключа недействителен, ключ Rijndael должен иметь длину 128, 192 или 256 бит.   -  person Gusman    schedule 27.02.2016
comment
@OndrejSvejdar пытается сказать, что вы должны использовать подготовленные операторы для предотвращения SQL-инъекций, потому что ваш текущий код уязвим для них.   -  person Artjom B.    schedule 27.02.2016
comment
Как изменить размер ключа? @Гусман   -  person user3450582    schedule 27.02.2016
comment
Пароли должны быть хешированы, а не зашифрованы. Если вы можете их расшифровать, то сможет и Плохой Парень   -  person Ňɏssa Pøngjǣrdenlarp    schedule 27.02.2016
comment
Эм... создайте массив из 16, 24 или 32 байт... byte[] keyByte = Encoding.ASCII.GetBytes(key); длина ключа точно не 16, 24 или 32 символа , поэтому keyByte не имеет длины 16, 24 или 32 байта.   -  person Gusman    schedule 27.02.2016
comment
байт[] keyByte = новый байт[32]; keyByte = Encoding.ASCII.GetBytes(ключ); @Гусман   -  person user3450582    schedule 27.02.2016
comment
Нет, это запишет keyByte с результатом, он не сохранит размер, вы должны хэшировать строку ключа, которая даст результат 16 или 32 байта.   -  person Gusman    schedule 27.02.2016
comment
@Gusman, можешь привести пример? Я не уверен, как это сделать.   -  person user3450582    schedule 27.02.2016
comment
Конечно, откройте браузер, перейдите в Google и введите C# hashing (return).   -  person Gusman    schedule 27.02.2016
comment
Вы должны использовать функцию получения ключа на основе пароля, чтобы перейти от строки к ключу. Варианты: PBKDF2 и bcrypt. PBKDF2 имеет реализацию в .NET.   -  person Maarten Bodewes    schedule 29.02.2016
comment
Основываясь на комментариях @MaartenBodewes, лучше не пытаться внедрять собственную безопасность. Посмотрите что-нибудь вроде: securitydriven.net/inferno.   -  person CodingGorilla    schedule 29.02.2016