C# 加密数据库sql窗体中存在的密码

C# 加密数据库sql窗体中存在的密码,c#,sql,winforms,encryption,C#,Sql,Winforms,Encryption,我有一个登录名和密码数据库。我不希望任何有权访问数据库的人都能看到每个人的密码。如何加密数据库中的密码 换句话说,我希望在数据库中对字段pwd(password)进行加密,但当我在LoginForm中输入它时,它会自动解密 我发现了一种加密字符串输入的方法,但它不能解决我的问题 static string Encrypt(string value) { using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()

我有一个登录名和密码数据库。我不希望任何有权访问数据库的人都能看到每个人的密码。如何加密数据库中的密码

换句话说,我希望在数据库中对字段pwd(password)进行加密,但当我在LoginForm中输入它时,它会自动解密

我发现了一种加密字符串输入的方法,但它不能解决我的问题

static string Encrypt(string value)
{
    using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
    {
        UTF8Encoding utf8 = new UTF8Encoding();
        byte[] data = md5.ComputeHash(utf8.GetBytes(value));
        return Convert.ToBase64String(data);
    }
}

private void BtnEncrypt_Click(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(txtPass.text))
    {
        MessageBox.Show("Please enter your password !");
    }
    texResult.Text=Encrypt(txtPass.Text);
}
拜托,谁能帮帮我。

提前感谢。

您可以使用加密功能对密码进行加密,并将加密后的密码存储在数据库中。 但是解密密码不是一个好的选择。密码加密应该是一种方式

要检查数据库中是否有密码,可以使用相同的加密功能加密用户输入的密码,然后将该加密密码与数据库中的加密密码匹配


谢谢

您可以使用加密功能对密码进行加密,并将加密后的密码存储在数据库中。 但是解密密码不是一个好的选择。密码加密应该是一种方式

要检查数据库中是否有密码,可以使用相同的加密功能加密用户输入的密码,然后将该加密密码与数据库中的加密密码匹配


谢谢

您可以使用任何复杂的加密技术来加密密码,并将要保存在数据库中的密码密钥发送给相应的用户。 现在,当客户端尝试登录并输入密码时,会将其发送到服务器

从服务器上,您可以再次转换登录详细信息并计算哈希值,最后发送到存储过程进行比较。如果两个字符串匹配,则返回true或false作为身份验证

using System.Security.Cryptography;
...
...
...
private const string _alg = "HmacSHA256";
private const string _salt = "rz8LuOtFBXphj9WQfvFh"; // Generated at https://www.random.org/strings

public static string GenerateToken(string username, string password)
{
    string hash = string.Join(":", new string[] { username, password });

    using (HMAC hmac = HMACSHA256.Create(_alg))
    {
        hmac.Key = Encoding.UTF8.GetBytes(GetHashedPassword(password));
        hmac.ComputeHash(Encoding.UTF8.GetBytes(hash));

        hash = Convert.ToBase64String(hmac.Hash);
    }

    return Convert.ToBase64String(Encoding.UTF8.GetBytes(hash));
}

public static string GetHashedPassword(string password)
{
    string key = string.Join(":", new string[] { password, _salt });

    using (HMAC hmac = HMACSHA256.Create(_alg))
    {
        // Hash the key.
        hmac.Key = Encoding.UTF8.GetBytes(_salt);
        hmac.ComputeHash(Encoding.UTF8.GetBytes(key));

        return Convert.ToBase64String(hmac.Hash);
    }
}

您可以使用任何复杂的加密技术来加密密码,并将要保存在数据库中的密码密钥发送给相应的用户。 现在,当客户端尝试登录并输入密码时,会将其发送到服务器

从服务器上,您可以再次转换登录详细信息并计算哈希值,最后发送到存储过程进行比较。如果两个字符串匹配,则返回true或false作为身份验证

using System.Security.Cryptography;
...
...
...
private const string _alg = "HmacSHA256";
private const string _salt = "rz8LuOtFBXphj9WQfvFh"; // Generated at https://www.random.org/strings

public static string GenerateToken(string username, string password)
{
    string hash = string.Join(":", new string[] { username, password });

    using (HMAC hmac = HMACSHA256.Create(_alg))
    {
        hmac.Key = Encoding.UTF8.GetBytes(GetHashedPassword(password));
        hmac.ComputeHash(Encoding.UTF8.GetBytes(hash));

        hash = Convert.ToBase64String(hmac.Hash);
    }

    return Convert.ToBase64String(Encoding.UTF8.GetBytes(hash));
}

public static string GetHashedPassword(string password)
{
    string key = string.Join(":", new string[] { password, _salt });

    using (HMAC hmac = HMACSHA256.Create(_alg))
    {
        // Hash the key.
        hmac.Key = Encoding.UTF8.GetBytes(_salt);
        hmac.ComputeHash(Encoding.UTF8.GetBytes(key));

        return Convert.ToBase64String(hmac.Hash);
    }
}

MD5不再安全

当用户注册使用您的应用程序时,请使用salt将密码与SHA512位进行散列。您可以找到类似PWDTK nuget的软件包,我们可以轻松使用。密码是什么,我们不需要知道它的意思,但只是扮演一个安全的角色。就像上面提到的一些人一样,当用户注册后尝试登录时,只需加密用户的输入(密码),并将其与SQL数据库中注册的密码进行比较。密码必须是单向的

登录结果显示成功或失败后,密码角色完成

表单的情况下,需要深入考虑安全连接字符串以连接到SQL数据库。一个可能的选择是Winform应用程序和SQL数据库之间的WCF中间件

最后,但非常重要的是,您必须使用SSL进行安全通信。

你可能会在以后的阶段考虑这些问题。

MD5不再是安全的。< /P> 当用户注册使用您的应用程序时,请使用salt将密码与SHA512位进行散列。您可以找到类似PWDTK nuget的软件包,我们可以轻松使用。密码是什么,我们不需要知道它的意思,但只是扮演一个安全的角色。就像上面提到的一些人一样,当用户注册后尝试登录时,只需加密用户的输入(密码),并将其与SQL数据库中注册的密码进行比较。密码必须是单向的

登录结果显示成功或失败后,密码角色完成

表单的情况下,需要深入考虑安全连接字符串以连接到SQL数据库。一个可能的选择是Winform应用程序和SQL数据库之间的WCF中间件

最后,但非常重要的是,您必须使用SSL进行安全通信。

你可以在以后的阶段考虑这些问题。

< P>很容易用散列加密加密。你要问的是加密-加密让你把你的密码变成一个明显的随机字符序列,然后可以解密得到原始密码回来。您应该使用(有些人建议)散列

有很多关于如何在网上进行加密/解密的例子,只需搜索即可。这是我想到的第一个:虽然从那里复制和粘贴代码很诱人,但我不会,因为这不是你应该做的。在数据库中存储用户密码时,使用密码哈希(使用salt)比存储加密密码要好得多。为什么?因为如果你的系统遭到黑客攻击,攻击者就不可能恢复用户的密码——你的所有帐户都可能会受到威胁,但鉴于人们经常在多个系统上使用相同的密码,你就不会危害你的用户


散列是单向函数,因此您无法获取原始密码。当有人想要登录时,您只需生成一个散列,然后将其与存储在数据库中的散列进行比较。如果您想了解更多关于这方面的信息以及为什么要使用它,那么这是一个很好的开始:如果您想加入并获得一些工作代码,那么请看一看。

加密和哈希很容易混淆。你要问的是加密-加密让你把你的密码变成一个明显的随机字符序列,然后可以解密得到原始密码回来。您应该使用(有些人建议)散列

有很多关于如何在网上进行加密/解密的例子,只需搜索即可。这是我想到的第一个:尽管从那里复制和粘贴代码很诱人,