加密密码

Jac*_*ada 11 c# encryption

我已经阅读了一些建议散列密码并将其存储在数据库中的问题.

当有人登录时,您将使用存储的密码散列密码.

我不明白这是如何工作的?两个字符串可以散列到相同的值 - 不太可能,但确实可能

有谁可以帮助我吗?

编辑:任何人都可以给出碰撞可能性的统计数据吗?

Sam*_*rum 24

您不应该存储未加密的密码,因为您的数据库管理员不应该访问客户密码.

散列密码可防止数据库管理员看到密码.

碰撞的可能性非常小并不是问题,因为在锁定账户之前,这并没有显着增加某人试图强行获取客户密码的机会.

PS它也是很好的做法,散列,使之更加仍然难以蛮力如果黑客不知怎么进入密码表之前的密码.使用彩虹表等更难

  • 密码没有多少味道; 总是给他们加盐. (7认同)
  • 为了最大限度地降低对多个密码进行暴力攻击的风险,您还应该对它们进行加密. (6认同)
  • 只是想指出一个*hash*是单向函数,而*encryption*意味着拥有正确密钥的人可以解密原始密码.哈希最适合密码检查,例如,您需要加密来发送安全的html. (3认同)
  • 我发现,辣椒的味道也会增加一些味道. (2认同)

Mic*_*rdt 10

两个字符串可以散列到相同的值 - 不太可能,但确实可能

是的,但如果哈希足够大并且质量很好,那么不用担心就不够了.在口语方面:应用程序的每个用户同时被闪电击中并不是一样的,但绝对可能.你担心吗?

  • 哦,太棒了,现在又担心了.谢谢. (10认同)

Tom*_*ana 5

即使两个字符串可以散列到相同的值(并且它们肯定会这样做,因为可能值的空间比散列的空间大得多),找到这样的字符串对仍然不是那么容易(假设你使用了强大的字符串对)哈希函数).

因此,如果攻击者想要在不知道密码的情况下以其他人的身份登录,他就必须找到一个密码,该密码具有相同的哈希值,这个密码应该与查找密码一样困难(哈希函数的不可逆性是基本属性) .

如果你想在.NET中使用散列,尝试类似的东西

    public static string ComputeHash(string plaintext)
    {
        HashAlgorithm mhash = new SHA1CryptoServiceProvider();
        byte[] bytValue = Encoding.UTF8.GetBytes(plaintext);
        byte[] bytHash = mhash.ComputeHash(bytValue);
        mhash.Clear();
        return Convert.ToBase64String(bytHash);
    }
Run Code Online (Sandbox Code Playgroud)