我想知道如何加密密码,然后将其添加到我的数据库中,然后再检查它。我有一些我要告诉朋友使用的代码,但是他不会告诉我如何使用它。老实说,我自己不知道如何使用它,所以这就是我来这里的原因。这是代码。我也想知道如何分开用户名和密码。我使用MySql.Data库。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace ClassCreation
{
class PasswordProtection
{
public string Hash(string text)
{
byte[] salt;
new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);
var pbkdf2 = new Rfc2898DeriveBytes(text, salt, 10000);
byte[] hash = pbkdf2.GetBytes(20);
byte[] hashBytes = new byte[36];
Array.Copy(salt, 0, hashBytes, 0, 16);
Array.Copy(hash, 0, hashBytes, 16, 20);
string savedPasswordHash = Convert.ToBase64String(hashBytes);
return savedPasswordHash;
}
public bool Match(string password, string savedPasswordHash)
{
byte[] hashBytes = Convert.FromBase64String(savedPasswordHash);
byte[] salt = new byte[16];
Array.Copy(hashBytes, 0, salt, 0, 16);
var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 10000);
byte[] hash = pbkdf2.GetBytes(20);
for (int i = 0; i < 20; i++)
if (hashBytes[i + 16] != hash[i])
return false;
else
return true;
return false;
}
}
}
答案 0 :(得分:3)
将密码存储在数据库中的想法取决于以安全方式存储密码的能力。加密意味着无论密码保护了那些值,我们都可以反转,这是我们所不希望的。相反,您想要不可逆地对密码进行哈希处理。
您提供的代码使用盐来对密码进行哈希处理-将随机字节数组引入密码中以掩盖内容。其背后的原因是蛮力攻击(彩虹桌等)可以对常用密码起作用。
我强烈建议您对盐析和哈希进行一些研究,而不是使用此代码。