2012-01-10 6 views
0

am [чтение] из простого текстового файла, имя пользователя и пароли, но его плохой способ обеспечения безопасности данных, есть ли другой способ сделать это, скорее всего, используя алгоритмы шифрования шифрования IV, ,Защита данных на стороне клиента

ответ

0

Вы можете кодировать свои пароли с помощью HASHES, таких как SHA1.

Function getSHA1Hash(ByVal strToHash As String) As String 

    Dim sha1Obj As New Security.Cryptography.SHA1CryptoServiceProvider 
    Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(strToHash) 

    bytesToHash = sha1Obj.ComputeHash(bytesToHash) 

    Dim strResult As String = "" 

    For Each b As Byte In bytesToHash 
     strResult += b.ToString("x2") 
    Next 

    Return strResult 

End Function 

Использование это просто!

Console.Write(getSHA1Hash("password")) 

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

if getSHA1Hash(input_password) = HASHED_OLD_PASSWORD then Authenticate() 

Хеши SHA1 не могут быть дешифруемыми без явной скотины, что делает все возможное, поэтому это довольно безопасное решение.

+0

спасибо mindw0rk, отличный подход к моей проблеме, заголовок для реализации вашего результата :-) – sarepta

+0

хэши _not_ encryption –

+0

Исправлена ​​моя терминология. Хотя это все еще хорошее решение для вопрошающего. – carlossless

1

Вам нужно решить, нужно ли вам снова расшифровывать текст или нет. Я бы предположил, что для паролей, по крайней мере, вы можете использовать однонаправленный хеш. Вы можете сделать это намного сложнее, если грубая сила атакует хэш, если вы используете соль. В идеале для каждого пароля следует использовать отдельную случайную соль: password + salt = hash. Вам нужно сохранить соль, а также хеш, но ее можно сохранить в текстовом виде, поскольку она не является криптографически секретной. Пример реализации (с использованием SHA256):

public class SHA256 
{ 
    public static string GetHash(string password, string salt) 
    { 
     UTF8Encoding encoder = new UTF8Encoding(); 
     SHA256Managed sha256 = new SHA256Managed(); 
     byte[] hashedDataBytes = sha256.ComputeHash(encoder.GetBytes(salt + password)); 
     return ByteArrayToString(hashedDataBytes); 
    } 


    /// <summary> 
    /// Generates a random 16 character alpha-numeric salt 
    /// </summary> 
    /// <returns></returns> 
    public static string GenerateRandomSalt() 
    { 
     const string allowedChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; 
     char[] chars = new char[16]; 
     var rd = new Random((int)DateTime.Now.Ticks); 

     for (int i = 0; i < 16; i++) 
     { 
      chars[i] = allowedChars[rd.Next(0, allowedChars.Length)]; 
     } 

     return new string(chars); 
    } 

    /// <summary> 
    /// Converts supplied byte array to hex format string. 
    /// </summary> 
    /// <param name="inputArray"></param> 
    /// <returns></returns> 
    private static string ByteArrayToString(byte[] inputArray) 
    { 
     StringBuilder output = new StringBuilder(""); 

     for (int i = 0; i < inputArray.Length; i++) 
     { 
      output.Append(inputArray[i].ToString("X2")); //Return in hex format 
     } 
     return output.ToString(); 
    } 
} 

Метод GenerateRandomSalt может быть использован для создания соли для вашего пароля. На SO есть много других вопросов, касающихся такого рода вещей.

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