栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ASP.NET Identity的默认密码哈希器-它如何工作且安全?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ASP.NET Identity的默认密码哈希器-它如何工作且安全?

这是默认实现的工作方式。它使用带有随机盐的键派生函数来生成哈希。盐包含在KDF的输出中。因此,每次您“哈希”相同的密码时,您将获得不同的哈希值。为了验证哈希,将输出拆分回salt和其余部分,然后使用指定的salt对密码再次运行KDF。如果结果与其余初始输出匹配,则验证哈希。

散列:

public static string HashPassword(string password){    byte[] salt;    byte[] buffer2;    if (password == null)    {        throw new ArgumentNullException("password");    }    using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, 0x10, 0x3e8))    {        salt = bytes.Salt;        buffer2 = bytes.GetBytes(0x20);    }    byte[] dst = new byte[0x31];    Buffer.BlockCopy(salt, 0, dst, 1, 0x10);    Buffer.BlockCopy(buffer2, 0, dst, 0x11, 0x20);    return Convert.Tobase64String(dst);}

验证中:

public static bool VerifyHashedPassword(string hashedPassword, string password){    byte[] buffer4;    if (hashedPassword == null)    {        return false;    }    if (password == null)    {        throw new ArgumentNullException("password");    }    byte[] src = Convert.Frombase64String(hashedPassword);    if ((src.Length != 0x31) || (src[0] != 0))    {        return false;    }    byte[] dst = new byte[0x10];    Buffer.BlockCopy(src, 1, dst, 0, 0x10);    byte[] buffer3 = new byte[0x20];    Buffer.BlockCopy(src, 0x11, buffer3, 0, 0x20);    using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, dst, 0x3e8))    {        buffer4 = bytes.GetBytes(0x20);    }    return ByteArraysEqual(buffer3, buffer4);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391668.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号