Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Bcyrpt生成无盐密码?_C#_.net_Hash_Bcrypt_Bcrypt.net - Fatal编程技术网

C# Bcyrpt生成无盐密码?

C# Bcyrpt生成无盐密码?,c#,.net,hash,bcrypt,bcrypt.net,C#,.net,Hash,Bcrypt,Bcrypt.net,我正在使用第三方库中的.NETBCrypt散列实现,它有一个创建散列的方法,只需提供文本或密码,如下所示 Bcrypt.HashPassword("password") 我知道生成的hash包含salt信息,但在创建hash时它没有获取salt参数 Bcrypt在内部创建随机盐并使用它 如果我不使用salt重载方法,它可能会导致安全漏洞?从理论上讲,您应该执行以下操作,其中p是给定的密码: 生成加密强随机saltS ComputeH=Hash(S+P),其中Hash是一种加密强散列算法 在数

我正在使用第三方库中的.NETBCrypt散列实现,它有一个创建散列的方法,只需提供文本或密码,如下所示

Bcrypt.HashPassword("password") 
我知道生成的hash包含salt信息,但在创建hash时它没有获取salt参数

Bcrypt在内部创建随机盐并使用它


如果我不使用salt重载方法,它可能会导致安全漏洞?

从理论上讲,您应该执行以下操作,其中
p
是给定的密码:

  • 生成加密强随机salt
    S
  • Compute
    H=Hash(S+P)
    ,其中
    Hash
    是一种加密强散列算法
  • 在数据库中为当前用户存储
    S
    H
  • 在身份验证时,为声称是同一用户的人提供候选密码
    p'
    ,当且仅当
    H==Hash(S+p')
    时验证该用户

    Bcrypt是否在内部创建并使用随机盐

    盐不是它应该只在内部创造的东西。它应该给你盐存储与散列盐+密码

    如果我不使用salt重载方法,它会导致安全漏洞吗


    是的。

    理论上你看起来不错,但你错过了Bcrypt的一些细节。Bcrypt可以验证哈希和文本,而不需要额外的salt参数,因为哈希字符串已经包含salt信息。检查这个问题的答案。所以没必要把盐藏在什么地方。@Freshblood啊,我不知道Bcrypt图书馆的细节。所以基本上,他们所谓的散列实际上只是盐和散列(或类似的东西)的串联。无论如何,我会把这个答案留在这里,尽管可能有更好的答案来解释Bcrypt的行为。