защита данных на стороне клиента - PullRequest
0 голосов
/ 10 января 2012

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

Ответы [ 2 ]

1 голос
/ 10 января 2012

Вам нужно решить, нужно ли вам снова дешифровать текст или нет.Я бы предположил, что, по крайней мере, для паролей вы можете использовать односторонний хеш. Вы можете сильно усложнить атаку методом хищения, если вы используете соль.В идеале для каждого пароля должна использоваться отдельная случайная соль: пароль + соль = хеш.Вы должны хранить как соль, так и хеш, но ее можно хранить в виде простого текста, поскольку она не является криптографически секретной.Пример реализации (с использованием 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 = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz0123456789";
        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.

0 голосов
/ 10 января 2012

Вы можете кодировать свои пароли с помощью 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 не расшифровываются без явного перебора всех возможностей, поэтому это довольно безопасное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...