在本地控制面板中开启了客户端认证,无法连接

在控制面板中设置了客户端认证方式,加盐方式为suffix ,账号类型是username, 密码加密方式是md5

md5_hash = hashlib.md5()
md5_hash.update(‘abc’.encode(‘utf-8’))
encrypted_password = md5_hash.hexdigest()

mqttc.connect(mqtt_cfg.hostname, port=mqtt_cfg.port)
mqttc.username_pw_set(‘abc’, encrypted_password)

一直连接不上。报错: Bad user name or password. loop_forever() will retry connection

奇怪,不用md5加密,就能连接上,但是每次连接,on_connect回调函数中reason_code总是报一次错误Bad user name or password.

如果你在 EMQX v5 内置数据库认证中选择了 MD5 算法,并将加盐方式(Salt Position)设置为 suffix,那么用户的真实用户名和密码分别为 adminpublic 时,客户端连接代码和普通明文认证完全一致,即:
• 用户名填写 admin
• 密码填写 public

说明:
• 客户端无需关心加盐和哈希算法,只需填入真实用户名和密码。
• 加盐和 MD5 哈希的处理是由 EMQX 服务端在认证时自动完成的。
• 他们只是为了不保存明文的密码。
PS:
你的代码顺序应该是先设置 pw 再 connect(虽然你说能工作,但我看着难受)

mqttc.username_pw_set(‘abc’, password)
mqttc.connect(mqtt_cfg.hostname, port=mqtt_cfg.port)

感谢。已解决