我正在使用 vernemq 使用 SHA256 算法从数据库中授权用户。我观察到使用内置 mqsql 函数在表中创建新条目时SHA2
,
INSERT INTO vmq_auth_acl
(mountpoint, client_id, username,
password, publish_acl, subscribe_acl)
SELECT
'', 'newUser2', 'newUser2', SHA2("CJJPL9", 256),
'[{"pattern":"botOut"}] ',
'[{"pattern":"botIn/#"}]';
它会生成类似这样的哈希值,54d0e30d0a00d86451a3353a2123fc1f006faaba6b55ef0d168390f26cbab82a
并且 Vernemq 服务器在使用CJJPL9
密码登录时成功验证了该用户。
但是,当我使用 passlib 库从 python 代码中将此条目添加到此表中时sha256_crypt.encrypt("CJJPL9")
,它会生成如下哈希
$5$rounds=80000$wnsT7Yr92oJoP28r$cKhJImk5mfuSKV9b3mumNzlbstFUplKtQXXMo4G6Ep5
。我知道,由于 salt,哈希值会有所不同,但是两种哈希值的格式存在明显差异,因此,verneMQ 服务器无法验证该用户的凭据。passlib 库的格式表明它只保留 256 位校验和的 43 个字符。我还尝试通过仅保留 passlib 哈希字符串的校验和部分来进行测试,但仍然没有运气。
我想知道 MySQLSAH2("CJJPL9", 256)
和sha256_crypt.encrypt("CJJPL9")
.