注意:我不会使用盐。谢谢你的建议!
我正在测试如何使用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();
}
}
}
答案 0 :(得分:2)
要将字符串转换为Byte[]
,请使用Encoding
类。
此外,result
是Byte[]
,不会覆盖ToString()
。
要获取字节数组的字符串表示形式,您可以调用BitConverter.ToString
或Convert.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();
}