C# 正在尝试散列密码
注意:我不会使用盐。谢谢你的建议强> 我正在测试如何使用SHA1散列一个密码,但我似乎无法理解它。我的数据库列是Password char(40)not null 这是我的密码: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 {
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速度太快了。