为什么身份框架核心散列密码的开头都一样



我正在构建一个应用程序,该应用程序使用点网核心API和标识核心进行用户管理。我正在调查我的数据库,当我看到PasswordHash字段中的所有字符串都以相同的字符开头时,我惊慌失措:AQAAAAEAACcQAAAAE,因为我认为salting不能正常工作。我现在意识到salting确实工作正常,因为密码哈希的其余部分会随着每个密码的变化而变化,但现在我对这个神秘的前缀感到好奇。

这个密码散列前缀在身份核心中用于什么?

根据实现,Microsoft.AspNetCore.Identity使用以下格式生成结果值(实际用于版本3(:


标题

A(字节#0:格式版本(0x00用于版本2,0x01用于版本3(

B(字节#1-4:int(4字节(,KeyDerivationPrf-Enum-密钥派生算法。V3中的HMACSHA256,自.NET7 以来的HMACSHA 512

C(字节#5-8:int(4字节(,迭代计数。在V3中为10000,自.NET7 以来为100k

D(字节#9-12:int(4字节(,salt长度。V3 中的16


身体

E(字节#13-28-salt。(长度取自标题D(

F(字节#29-60-散列(头B处的HMACSHA256表示其长度为256/8=32字节(


结果字节数组以BASE64格式存储


很明显,由于所有V3哈希的标头都是相同的,因此所有V3哈希在开头都将具有相同的字符(61个字节中的前13个(。

最新更新