我正在构建一个应用程序,该应用程序使用点网核心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个(。