gpt4 book ai didi

ASP.NET 成员(member)盐?

转载 作者:行者123 更新时间:2023-12-03 11:36:00 27 4
gpt4 key购买 nike

ASP.NET 成员资格如何生成他们的 salt key ,然后他们如何对其进行编码(即是 salt + 密码还是密码 + salt)?

我正在使用 SHA-1使用我的成员(member)资格,但我想重新创建相同的盐,以便内置的成员(member)资格可以像我的东西一样散列这些东西。

编辑 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, 0, dst, 0, src.Length);
Buffer.BlockCopy(bytes, 0, dst, 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, 0, dst, 0, src.Length);
Buffer.BlockCopy(bytes, 0, dst, src.Length, 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 成员身份兼容的方式使用它。

对不起,我的解释不是最好的 - 这能回答你的问题吗?

关于ASP.NET 成员(member)盐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267882/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com