我正在迁移一个使用Passlib 1.6.2生成密码哈希的平台。加密密码的代码为(哈希值以回合的默认值调用):
from passlib.hash import pbkdf2_sha512 as pb
def hash(cleartext, rounds=10001):
return pb.encrypt(cleartext, rounds=rounds)
输出格式如下(对于密码“ Patient3”(不带引号)):
$pbkdf2-sha512$10001$0dr7v7eWUmptrfW.9z6HkA$w9j9AMVmKAP17OosCqDxDv2hjsvzlLpF8Rra8I7p/b5746rghZ8WrgEjDpvXG5hLz1UeNLzgFa81Drbx2b7.hg
和“ Testing123”
$pbkdf2-sha512$10001$2ZuTslYKAYDQGiPkfA.B8A$ChsEXEjanEToQcPJiuVaKk0Ls3n0YK7gnxsu59rxWOawl/iKgo0XSWyaAfhFV0.Yu3QqfehB4dc7yGGsIW.ARQ
我可以看到代表:
passlib定义的所有pbkdf2散列都采用相同的格式,即$ pbkdf2-digest $ rounds $ salt $ checksum。
$ pbkdf2-digest $用作模块化地穴格式标识符(在示例中为$ pbkdf2-sha256 $)。摘要-这指定与HMAC结合使用的特定加密哈希,以形成用于该特定哈希的PBKDF2的伪随机函数(在示例中为sha256)。rounds-应该执行的迭代次数。它被编码为无零填充的正十进制数(在示例中为6400)。salt-这是传递到PBKDF2函数中的原始盐字节的自适应base64编码。校验和-这是从PBKDF2函数返回的原始派生密钥字节的自适应base64编码。每个方案都使用其特定哈希算法(摘要)的摘要大小作为原始派生密钥的大小。通过base64编码将其放大大约4/3,从而导致校验和大小为27、43
我发现passlib.net看起来有点像废弃的beta,它使用'$ 6 $'作为算法。我无法获取它来验证密码。我尝试将算法更改为$ 6 $,但我怀疑实际上也会更改盐值。
我还尝试过将PWDTK与Salt和Hash的各种值一起使用,但是可能是因为我错误地分割了影子密码,或者在某些我不应该使用的地方提供了$。
是否有任何方法可以针对.NET中的此哈希值验证密码?还是另一种不涉及Python代理或不让用户重新提供密码的解决方案?
通过将密码传递到PBKDF HMAC-SHA-256哈希方法中,然后将所得的哈希值与保存的哈希值部分(从Base64版本转换回来的)进行比较,来验证哈希值。
将哈希保存为二进制,然后分离哈希使用UTF-8编码PBKDF2,HMAC,SHA-256(toBinary(password,salt,10001)== hash密码将密码转换为二进制)密码:“ Patient3”
$ pbkdf2-sha512 $ 10001 $ 0dr7v7eWUmptrfW.9z6HkA $ w9j9AMVmKAP17OosCqDxDv2hjsvzlLpF8Rra8I7p / b5746rghZ8WrgEjDpvXG5hLz1Uerbzgg81
分解为(将字符串转换为标准Base64(将'。'更改为'+'并添加尾随'='填充:
pbkdf2 - sha512
10001
0dr7v7eWUmptrfW+9z6HkA==
w9j9AMVmKAP17OosCqDxDv2hjsvzlLpF8Rra8I7p/b5746rghZ8WrgEjDpvXG5hLz1UeNLzgFa81Drbx2b7+hg==
解码为十六进制:
D1DAFBBFB796526A6DADF5BEF73E8790
C3D8FD00C5662803F5ECEA2C0AA0F10EFDA18ECBF394BA45F11ADAF08EE9FDBE7BE3AAE0859F16AE01230E9BD71B984BCF551E34BCE015AF350EB6F1D9BEFE86
这很有意义:16字节(128位)盐和64字节(512位)SHA-512哈希。
使用UTF-8将“ Patient3”转换为二进制数组使用迭代计数od 10001将盐从修改后的BASE64编码转换为16字节二进制数组使用SHA-512的HMAC将其输入PBKDF2
我懂了
C3D8FD00C5662803F5ECEA2C0AA0F10EFDA18ECBF394BA45F11ADAF08EE9FDBE7BE3AAE0859F16AE01230E9BD71B984BCF551E34BCE015AF350EB6F1D9BEFE86
在对Base64进行编码时,用“。”替换“ +”字符。并删除尾随的'='字符将返回:w9j9AMVmKAP17OosCqDxDv2hjsvzlLpF8Rra8I7p / b5746rghZ8WrgEjDpvXG5hLz1UeNLzgFa81Drbx2b7.hg
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句