C# 正在尝试散列密码

C# 正在尝试散列密码,c#,hash,sha1,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 {

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

我正在测试如何使用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();

        }
    }
}

要将字符串转换为
字节[]
,请使用
编码类

另外,
result
是一个
字节[]
,它不会覆盖
ToString()

要获取字节数组的字符串表示形式,可以调用
BitConverter.ToString
Convert.ToBase64String


在数据库中,应直接存储原始字节数组。

要将字符串转换为
字节[]
,请使用
编码类

另外,
result
是一个
字节[]
,它不会覆盖
ToString()

要获取字节数组的字符串表示形式,可以调用
BitConverter.ToString
Convert.ToBase64String


在数据库中,您应该直接存储原始字节数组。

听起来好像您正试图将
字符串
转换为
字节[]
。这是通过使用
编码
类之一来完成的

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

我不确定哪一个最适合您的场景,但我会使用
Unicode
,除非我有特殊的理由这样做

听起来好像您正在尝试将
字符串
转换为
字节[]
。这是通过使用
编码
类之一来完成的

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

我不确定哪一个最适合您的场景,但我会使用
Unicode
,除非我有特殊的理由这样做

所以你正确的程序应该是

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

所以你正确的程序应该是

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

注意:我不会使用盐。。。你应该。你为什么不呢?你的问题是什么?你的整个问题没有一个问号,我看到了三个问号。可能应该删除这些,但无法想象它会编译:)此外,您应该使用
SHA512
@SLaks:为什么不直接转到PBKDF2?注意:我不会使用盐。。。你应该。你为什么不呢?你的问题是什么?你的整个问题没有一个问号,我看到了三个问号。可能应该删除这些,但无法想象它会编译:)此外,您应该使用
SHA512
@SLaks:为什么不直接转到PBKDF2?我强烈建议使用UTF8或UTF16编码,而不是ASCII编码。当然,SHA-1太快了。我强烈建议使用UTF8或UTF16编码,而不是ASCII编码。当然,SHA-1速度太快了。