加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET会员盐?

发布时间:2020-12-16 00:44:44 所属栏目:asp.Net 来源:网络整理
导读:ASP.NET会员如何生成他们的盐键,然后如何对它们进行编码(也就是盐密码或密码盐)? 我正在使用SHA-1与我的会员资格,但我想重新创建相同的盐,所以内置的会员资料可能会像我的东西一样散布的东西。 编辑2:没关系我误读了,正在考虑说字节,而不是位。所以我
ASP.NET会员如何生成他们的盐键,然后如何对它们进行编码(也就是盐密码或密码盐)?

我正在使用SHA-1与我的会员资格,但我想重新创建相同的盐,所以内置的会员资料可能会像我的东西一样散布的东西。

编辑2:没关系我误读了,正在考虑说字节,而不是位。所以我传递128字节,而不是128位。

编辑:我一直在努力做到这一点。这就是我所拥有的

public string EncodePassword(string password,string salt)
{
    byte[] bytes = Encoding.Unicode.GetBytes(password);
    byte[] src = Encoding.Unicode.GetBytes(salt);
    byte[] dst = new byte[src.Length + bytes.Length];

    Buffer.BlockCopy(src,dst,src.Length);
    Buffer.BlockCopy(bytes,src.Length,bytes.Length);

    HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");

    byte[] inArray = algorithm.ComputeHash(dst);

    return Convert.ToBase64String(inArray);
}

private byte[] createSalt(byte[] saltSize)
{
    byte[] saltBytes = saltSize;

    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    rng.GetNonZeroBytes(saltBytes);

    return saltBytes;
}

所以我没有试图看看ASP.NET会员是否会认识到这个,而哈希密码看起来很接近。我只是不知道如何把它转换为base64的盐。

我这样做

byte[] storeSalt = createSalt(new byte[128]);
string salt = Encoding.Unicode.GetString(storeSalt);
string base64Salt = Convert.ToBase64String(storeSalt);

int test = base64Salt.Length;

测试长度是172,这超过了128位,所以我做错了什么?

这是他们的盐看起来像

vkNj4EvbEPbk1HHW+K8y/A==

这是我的盐看起来像

E9oEtqo0livLke9+csUkf2AOLzFsOvhkB/NocSQm33aySyNOphplx9yH2bgsHoEeR/aw/pMe4SkeDvNVfnemoB4PDNRUB9drFhzXOW5jypF9NQmBZaJDvJ+uK3mPXsWkEcxANn9mdRzYCEYCaVhgAZ5oQRnnT721mbFKpfc4kpI=

解决方法

What is default hash algorithm that ASP.NET membership uses?对其默认算法进行了很好的讨论。

我希望有帮助!

编辑-
我提到的答案是顶部帖子中的代码,

public string EncodePassword(string pass,string salt)
    {
        byte[] bytes = Encoding.Unicode.GetBytes(pass);
        //byte[] src = Encoding.Unicode.GetBytes(salt); Corrected 5/15/2013
        byte[] src = Convert.FromBase64String(salt); 
        byte[] dst = new byte[src.Length + bytes.Length];
        Buffer.BlockCopy(src,src.Length);
        Buffer.BlockCopy(bytes,bytes.Length);
        HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
        byte[] inArray = algorithm.ComputeHash(dst);
        return Convert.ToBase64String(inArray);
    }

他们正在使用BlockCopy组合Unicode Salt Pass

– 回答你的问题:

这两种算法都是必需的,可以实现不同的角

RNG Crypto用于生成盐。它基本上是一长串的随机数据。这是基于每个用户生成和存储的。通常,这是在创建用户或更改密码时完成的。

BlockCopy只是将盐与密码结合使用的方法。上面的代码基本上等同于盐密码。

你不能重新创建盐值,因为它是完全随机的。然而,它是通过框架为每个用户存储的。

将salt与密码结合使用以上技术进行散列,将允许您使用框架存储的散列值验证用户密码。

我想我们都以不同的方式看你的问题。我发布的代码不会生成你的盐,但它会让您以与ASP.NET成员身份兼容的方式使用它。

对不起,我的解释不是最好的答案您的问题?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读