【问题标题】:Password encryption in C#?C#中的密码加密?
【发布时间】:2010-12-03 13:48:35
【问题描述】:

如何在 C# 中加密和解密密码?感谢您的帮助。

【问题讨论】:

  • 解释更多。你真的需要加密还是只需要散列就可以了?给我们一些背景信息。
  • 将给定的纯文本加密为加密值以存储在数据库中,并将加密的值解密为纯文本。

标签: c# .net passwords encryption


【解决方案1】:

更新

看到这个答案:C# Password Encryption

-- 或--

阅读这篇文章:http://csharptest.net/470/another-example-of-how-to-store-a-salted-password-hash/


互联网上有很多关于存储密码的好消息和坏消息。你需要知道两件事:

  1. 您应该使用“加盐”哈希来防止字典攻击
  2. 您至少使用 SHA256 哈希提供程序

快速搜索给了我这个示例代码: http://www.obviex.com/samples/hash.aspx

我会选择这个 SaltedHash 实用程序类(乍一看相当完整):

http://www.dijksterhuis.org/creating-salted-hash-values-in-c/

【讨论】:

    【解决方案2】:

    首先,您实际上不会将加密密码保存在任何地方,而是执行单向哈希(例如,SHA)存储该哈希。然后,当您向用户询问密码时,您执行相同的哈希。如果新的哈希值与存储的哈希值匹配,那么您就有了匹配项。

    散列和加密的区别在于,加密可以恢复原始文本,而散列则不能。

    阅读 SHA(安全散列算法)和其他散列算法。这应该会给你一个好的开始。

    更好的是,了解 .NET 中内置的 Membership API。实现起来几乎是微不足道的,它可以为您管理所有关于用户 ID、密码、登录、注销以及很多的不愉快。

    【讨论】:

    • 很好的答案,除了 MD5 不应该再用于安全相关的实现。
    • 在典型情况下,您是正确的,您通常会存储密码哈希,但也有例外。我有一个存储实际密码的应用程序。这是我们大学的访客帐户系统。与其将密码暴露给我们的服务台工作人员,我还提供了一种方法,如果客人忘记了更改密码的内容,可以将其重置为原始密码。它使用可逆加密将这些存储在数据库中。只要您保留密钥,您就可以存储加密的任何内容。
    • @Jaccco - 我到底在想什么?!现在还早。 SHA,而不是 MD5。谢谢你的水龙头。相应地编辑
    • @Bob Kaufman - 从理论上讲,SHA-1 接近于被破坏。很快就会有另一个转变:D
    • @tvanfosson - 你寄给我寻找权威文章“为什么我们散列而不是加密密码”,但找不到。我想这取决于密码保护的帐户的价值。我当然不会相信可以恢复我密码的金融机构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2010-09-21
    • 2011-03-03
    相关资源
    最近更新 更多