首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scrypt和Cryptsharp的示例代码

Scrypt和Cryptsharp的示例代码
EN

Stack Overflow用户
提问于 2013-11-18 16:15:37
回答 2查看 10.6K关注 0票数 8

我已经搜索了整个谷歌,但我找不到使用Cryptsharp库的Scrypt用法(用于散列密码)的代码样本。

你能提供一个散列密码的样本吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-19 04:25:52

它只是a single call,所以我将向您介绍参数:

  1. key:这是你的密码,使用UTF-8编码(没有字节顺序标记)把你的密码编码成一个字节array;
  2. salt:一个安全的随机字节串,16字节应该是ample;
  3. cost:给出的建议是262144,但是如果你的服务器能处理额外的load;
  4. blockSize:,你可能想增加这个值请看开销,给出的建议是8;
  5. parallel:我会将其设置为1,除非您想要尝试使用multi-threading;
  6. maxThreads:一般情况下,null会做得很好,这取决于密码128应该是足够的,但您的密码不太可能具有超过128位的安全性。

您应该至少存储盐和结果。如果要将它们存储为字符串,则可能需要使用base64编码。

我建议您存储一个额外的数据:基于密码的密钥派生方案(PBKDF)的一个版本。在这种情况下,你可以在以后升级你的方案(你需要用户提供他/她的密码来做这件事,所以你必须在线做这件事,所以你最终会有多个方案同时运行)。

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

票数 16
EN

Stack Overflow用户

发布于 2016-01-12 16:54:46

@MaartebBodewes提供了一个非常好的答案,并提供了非常明智的附加提示。以下是他的建议的代码示例。我还建议阅读“Your password is too damn short”,它展示了使用现代密码学的重要性,比如(在撰写本文时) BCrypt或Scrypt

代码语言:javascript
复制
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);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20042977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档