2013-05-25 2 views
0

Я работаю над расшифровкой пароля, и я застрял на этой ошибке. Неверная длина для массива char-64 Base. Я пытаюсь сделать слишком много вещей, но все напрасно мой проект застревает из-за эта ошибка. Вот мой код.Недопустимая длина массива символов Base-64

public string PasswordDecrypt(string sQueryString) 
    { 

     byte[] buffer; 
     TripleDESCryptoServiceProvider loCryptoClass = new TripleDESCryptoServiceProvider(); 
     MD5CryptoServiceProvider loCryptoProvider = new MD5CryptoServiceProvider(); 


     try 
     { 
      string base64String; 
      char[] base64CharArray; 
      base64CharArray = new char[sQueryString.Length]; 
      base64String = new string(base64CharArray); 
      Convert.FromBase64String(sQueryString); 
      buffer = Convert.FromBase64String(sQueryString); 
      loCryptoClass.Key = loCryptoProvider.ComputeHash(ASCIIEncoding.ASCII.GetBytes(sQueryString.Replace("","+"))); 
      loCryptoClass.IV = lbtVector; 
      return ASCIIEncoding.ASCII.GetString(loCryptoClass.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length)); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      loCryptoClass.Clear(); 
      loCryptoProvider.Clear(); 
      loCryptoClass = null; 
      loCryptoProvider = null; 
     } 

    } 
+0

На какой линии исключение бросают? – Moka

+0

lbtVector не объявлен. – Moka

+0

lbtVector заявлен еще есть erro – Raheel

ответ

1

Пароли никогда не должны быть дешифрованы (или зашифрованы, если на то пошло). Вы должны создавать хэш пароля (желательно соленый) при создании/обновлении хранилища учетных данных, а затем сравнивать хэш с хэшем, полученным из того, что пользователь вводит при попытке аутентификации.

Это реализация я использовал в прошлом (который имеет некоторые недостатки, но работает в некритических приложениях):

public class HashProvider 
{ 
    /// <summary> 
    /// Computes the SHA1 hash from the given string. 
    /// </summary> 
    /// <param name="stringToHash">The string to hash.</param> 
    /// <returns></returns> 
    public static string GetSHA1Hash(string stringToHash) 
    { 
     var data = Encoding.UTF8.GetBytes(stringToHash); 
     var hashData = new SHA1CryptoServiceProvider().ComputeHash(data); 

     return String.Concat(hashData.Select(b => b.ToString("X2"))); 
    } 


    /// <summary> 
    /// Computes the SHA1 hash from the given string, and then encodes the hash as a Base64 string. 
    /// </summary> 
    /// <param name="stringToHash">The string to hash.</param> 
    /// <returns></returns> 
    public static string GetSHA1toBase64Hash(string stringToHash) 
    { 
     var data = Encoding.UTF8.GetBytes(stringToHash); 
     var hashData = new SHA1CryptoServiceProvider().ComputeHash(data); 

     return Convert.ToBase64String(hashData); 
    } 
} 
+0

. Значение соления нельзя недооценивать - радужные столы и т. Д. Однако, хотя я твердо согласен с тем, что вы говорите, обратитесь к вопросу base-64, который предположительно будет применяться и после хэширования. –

+0

Как я могу это сделать, новичок на C# мне нужно разработать и развернуть экран входа в систему, где пользователь вводит пароль, который расшифровывается – Raheel

+0

Как ни странно, если вы посмотрите на код, то «расшифровка» OP фактически выполняет хэш. Неясно, является ли это преднамеренным. –

Смежные вопросы