c# - 如何加密密码并将其添加到我的sql数据库?

标签 c# mysql encryption passwords username

我想知道如何加密我的密码,然后将其添加到我的数据库中,同时还要检查它。我有一些我要告诉朋友使用的代码,但是他不会告诉我如何使用它。老实说,我自己不知道如何使用它,所以这就是我来这里的原因。这是代码。我也想知道如何分开用户名和密码。我使用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;
    }
}
      }

最佳答案

在数据库中存储密码的想法依赖于以安全方式存储密码的能力。加密意味着,无论密码学保护了那些值,我们都可以反转那些我们不想要的值。相反,您想要不可逆地对密码进行哈希处理。

您提供的代码使用盐来对密码进行哈希处理-密码中引入了一个随机字节数组,以掩盖内容。其背后的理由是,暴力攻击(彩虹桌等)可能会针对常用密码起作用。

我不建议使用此代码,而强烈建议对盐析和哈希进行一些调查。

关于c# - 如何加密密码并将其添加到我的sql数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51032726/

相关文章:

php - 单独的主题标签和文本 PHP

c# - Json.NET 中每个树节点序列化前后的自定义代码

c# - WPF转换器无法正常工作

mysql - SQL - 从那里选择即将到来的事件和一周后的所有事件

java - Java AES 加密是否符合 FIPS 140-2?

Javascript AES 加密与 iOS AES 加密不匹配

encryption - s3cmd 的替代方案,用于在本地文件夹和具有加密功能的 Amazon s3 之间进行同步

c# - 如何创建调用 IEnumerable<TSource>.Any(...) 的表达式树?

c# - 与 Entity Framework Fluent API 的一对一关系

mysql - 导入 MySql 转储的子集