试图哈希密码

时间:2010-08-24 00:51:06

标签: c# hash sha1

注意:我不会使用盐。谢谢你的建议!

我正在测试如何使用SHA1散列密码,似乎无法绕过它。我的数据库列是Password char(40)not null。

这是我的代码:

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 个答案:

答案 0 :(得分:2)

要将字符串转换为Byte[],请使用Encoding类。

此外,resultByte[],不会覆盖ToString()

要获取字节数组的字符串表示形式,您可以调用BitConverter.ToStringConvert.ToBase64String 在数据库中,您应该直接存储原始字节数组。

答案 1 :(得分:2)

听起来您正试图将string转换为byte[]。这是通过使用其中一个Encoding类来完成的。

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

我不确定哪种情况最适合您的情况,但我会使用Unicode,除非我有其他特定原因。

答案 2 :(得分:0)

所以你的正确程序就像是

    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();
    }