加密密码C#

时间:2010-08-05 19:55:15

标签: c# encryption

我在我的网站上实现用户帐户。我需要加密来自新成员的密码,但是我已经发现了许多可以实现的选项。

对称和非对称密码系统,公钥与私钥,数字签名,哈希算法,RSA,DES,Rijndael,PGP,MD5,SHA-1,https,安全套接字,Camellia,IDEA;这是什么意思呢?

我甚至不知道MD5和rinjdael之间的区别,有人能告诉我加密的最佳选择吗?

8 个答案:

答案 0 :(得分:11)

如果您使用的是asp.net,则可以使用内置的用户帐户功能。

如果你坚持建立自己的,你不应该加密,你应该哈希并且只存储哈希,而不是实际的密码。

这是一个link,可以帮助您入门。

评论更新
membership providers for MySql
membership providers for Oracle

答案 1 :(得分:3)

What is the easiest way to encrypt a password when I save it to the registry?

您不加密对其进行哈希处理的密码,请参阅类似问题的链接

答案 2 :(得分:1)

如果你想在数据库中存储密码,我建议你使用HMAC(基于哈希的消息认证码);你需要一个加密散列函数(例如SHA-512)和一个秘密密钥来生成MAC。此外,重要的是要注意您不加密密码,而是哈希

例如,对于本地保存的密码的加密(尽管Bruce Schneier says you should write your passwords down on paper),您可以使用非RSA等非对称密钥加密系统。在这种情况下,您将拥有一个密钥对,其中包含一个您将与朋友共享的公钥,以及一个您应该保密的私钥。 RSA的优点是你可以使用你的公钥加密消息,然后用你的私钥解密它们;或者您可以使用它来对文档进行数字签名,方法是使用您的私钥来计算文档的哈希值,然后使用您的公钥对其进行验证。太漂亮了!

答案 3 :(得分:1)

你不应该加密密码,而是使用salt(以防止彩虹表)和SHA-256或更好的密码。这意味着您不必保留密钥并担心密钥管理的负载,也意味着没有人(包括您自己)可以从数据库中的数据中找出用户密码(他们只能确认他们有猜对了正确的密码。)

还建议您使用哈希的大量(1000+)次迭代来使计算速度变慢(对于输入正确密码的用户来说速度不是太慢,但如果你正在散列大量的单词,则速度太慢看看你的db的内容是否匹配)。

如果你使用google盐,彩虹表,哈希等,那里有很多信息。

答案 4 :(得分:1)

我在第一次学习如何存储密码时使用的

Here is a really good article。这是一个非常好的入门书,它是用C#编写的

答案 5 :(得分:0)

我认为你可以使用MD5,它很容易在.Net上实现,它是一个128位(单向)加密哈希函数。但它在广泛的范围内存在散列问题。

或者您可以查看Gost,这是一个256位加密哈希函数。

GOST Hash function

答案 6 :(得分:0)

之前已经回答了这个问题,但简短的版本是你给密码加密,用至少SHA-256哈希,最好使用强化。如果这对你没有意义,你还没有准备好写任何东西;继续研究。

答案 7 :(得分:0)

我已使用此代码以二进制格式加密密码..可能这会对您有所帮助

private string Encrypt(string clearText)
{
    string EncryptionKey = "MAKV2SPBNI99212";
    byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
    using (Aes encryptor = Aes.Create())
    {
        Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
        encryptor.Key = pdb.GetBytes(32);
        encryptor.IV = pdb.GetBytes(16);
        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cs.Write(clearBytes, 0, clearBytes.Length);
                cs.Close();
            }
            clearText = Convert.ToBase64String(ms.ToArray());
        }
    }
    return clearText;
}