我需要将passlib(具体为pbkdf2-sha512(摘要移植到另一个系统(Auth0(,并需要使用B64编码的salt(无填充字符的常规base64(将其转换为PHC字符串格式。
Passlib使用自己的"自适应base64编码"方法将其编码为缩短的base64格式。我基本上需要将其转换为B64格式,以包含在我的Auth0导入文件中。
pbkdf2-sha512文档将输出格式解释为:
$pbkdf2摘要$rounds$salt$校验和
我的完整pbkdf2-sha512哈希我的密码'密码!'看起来像这样:
$pbkdf2-sha512$25000$8d7bW2stZaw1BoBQyhkjZA$Dszct0GGjjfikK3cJhx.4M.YdOoytY9T5qaib9y8C/gvC1rE4iCWT970bN/MJD81RVToY.855KWRsGoPudA0HA
输出passlib散列的简单脚本:
from passlib.hash import pbkdf2_sha512
print(pbkdf2_sha512.hash("Password!"))
从Passlib文档中,我假设如下:
Key size: 16k (128 bits) - this is the default (not specified anywhere in the output)
Digest type: pbkdf2-sha512
Rounds: 25000
Salt: 8d7bW2stZaw1BoBQyhkjZA
Digest / Hash data: Dszct0GGjjfikK3cJhx.4M.YdOoytY9T5qaib9y8C/gvC1rE4iCWT970bN/MJD81RVToY.855KWRsGoPudA0HA
我正在努力将盐和摘要转换为Auth0所需的B64格式。感谢您的帮助!
好吧,我想我已经想通了。。。我的理解是passlib的格式只是用替换+。并且去掉了填充和空白,所以为了满足我的需求(香草B64,没有空白或填充(,我只需要替换。带+,我有正确的格式。
在测试中,我还注意到密钥长度是512字节(64k(,而不是我最初认为的128/16。
我使用此工具进行了确认:https://8gwifi.org/pbkdf.jsp(注意,盐中添加了填充,使其长度为24个字符(
对于任何想要了解Passlib base64风格背景的人,请参阅谷歌群组上的这篇文章。