我已经在谷歌搜索,我找不到使用 cryptsharp 图书馆。

可以请提供用于散列密码的样本吗?

有帮助吗?

解决方案

它只是单一呼叫我会走过你的参数:

  1. key:这是您的密码,请使用UTF-8编码(没有字节顺序标记)将密码进行编码为字节数组;
  2. salt:一串安全随机字节存储的scry函数的结果,16字节应该是充足的;
  3. cost:给定的建议是262144,但如果您的服务器可以处理额外的负载,则可能希望增加该值;
  4. blockSize:参见成本,给定的建议是8;
  5. parallel:除非您想要尝试多线程,否则我会将其保持为1;
  6. maxThreads:通常,null会很好;
  7. derivedKeyLength:嗯,这取决于密码128应该是充足的,但您的密码不太可能有超过128位的安全性。
  8. 你至少应该存放盐并结果。如果要将它们作为字符串存储,则可能需要使用Base 64编码。

    我会建议您存储一个额外的数据:基于密码的密钥推导方案的版本(PBKDF)。说,将其设置为使用scrypt的生成扫描,使用给定的密钥编码,salt大小,成本,blocksize等。在这种情况下,您可以稍后升级您的方案(您需要用户提供他/她的密码来执行此操作,因此您将不得不在线执行此操作,因此您将最终同时进行多种方案)。

    请注意,您可以将PBKDF函数调用链,因此您可以使用原始的PBKDF输出并将其用作下一个PBKDF的输入。在这种情况下,用户不必提供密码(此提示是在另一个问题上从CodesInchaOS中获取的)。

其他提示

@maartebbodewes提供了非常明智的额外提示的出色答案。这是一个带他的建议的代码样本。我还会建议阅读'你的密码太短'这表明使用现代密码学的重要性(在写作时)bcrypt或 scrypt

public string Hash(string secret, string salt)
{
    var keyBytes = Encoding.UTF8.GetBytes(secret);
    var saltBytes = Encoding.UTF8.GetBytes(salt);
    var cost = 262144;
    var blockSize = 8;
    var parallel = 1;
    var maxThreads = (int?)null;
    var derivedKeyLength = 128;

    var bytes = SCrypt.ComputeDerivedKey(keyBytes, saltBytes, cost, blockSize, parallel, maxThreads, derivedKeyLength);
    return Convert.ToBase64String(bytes);
}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top