Попытка хешировать пароль - PullRequest
0 голосов
/ 24 августа 2010

Примечание: я не буду использовать соли.Спасибо за ваш совет, хотя!

Я тестирую, как хешировать пароль с помощью SHA1, и, кажется, не могу обернуть его вокруг.Мой столбец базы данных - пароль char (40), не ноль.

Вот мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace Consumer
{
    class Program
    {
        static void Main(string[] args)
        {
            string password = "Mypassword";
            byte[] data password.tobytearray()???
            byte[] result;

            SHA1 sha = new SHA1CryptoServiceProvider();
            // This is one implementation of the abstract class SHA1.
            result = sha.ComputeHash(data);
            Console.WriteLine(result.ToString());
            Console.ReadLine();

        }
    }
}

Ответы [ 3 ]

2 голосов
/ 24 августа 2010

Похоже, вы пытаетесь конвертировать string в byte[]. Это делается с помощью одного из Encoding классов.

byte[] data = System.Text.Encoding.Unicode.GetBytes(password);
byte[] data = System.Text.Encoding.ASCII.GetBytes(password);

Я не уверен, что наиболее подходит для вашего сценария, но я бы использовал Unicode, если у меня не было конкретной причины поступить иначе.

2 голосов
/ 24 августа 2010

Чтобы преобразовать строку в Byte[], используйте класс Encoding.

Также result - это Byte[], который не переопределяет ToString().

Чтобы получить строковое представление массива байтов, вы можете вызвать BitConverter.ToString или Convert.ToBase64String.
В базе данных вы должны хранить необработанный байтовый массив напрямую.

0 голосов
/ 24 августа 2010

То есть ваша правильная программа будет выглядеть примерно так:

    static void Main(string[] args)
    {
        string password = "Mypassword";
        byte[] data = System.Text.Encoding.ASCII.GetBytes(password);
        //or byte[] data = System.Text.Encoding.Unicode.GetBytes(password);
        byte[] result;

        SHA1 sha = new SHA1CryptoServiceProvider();
        // This is one implementation of the abstract class SHA1.
        result = sha.ComputeHash(data);
        Console.WriteLine(Convert.ToBase64String(result));
        Console.ReadLine();
    }
...