Python使用PubNub发布加密消息出现dict与bytes类型错误如何解决
问题原因
- PubNub Python SDK的
encrypt方法仅支持输入字符串/字节类型数据,不支持直接加密Python字典对象,直接传入字典msg时,SDK内部加密逻辑尝试将字典与字节类型的加密运算参数做拼接,就触发了dict和bytes不支持相加的类型错误。
可行解决方案
加密发布端需要先把字典序列化为JSON字符串,再执行加密操作,修改后的代码如下:
import json msg = {"freq" : modbusRead[0], "voltage" : modbusRead[1], "rpm" : modbusRead[2] } # 先将字典序列化为JSON字符串 msg_str = json.dumps(msg) # 加密字符串 secretMsg = pubnub.encrypt("RandomCipherKey", msg_str) readSecret = pubnub.publish().channel(CHANNEL).message(secretMsg).pn_async(publish_callback)
对应的订阅接收端,拿到解密后的内容后,需要反序列化回字典才能正常使用字段,示例处理逻辑:
# 接收端解密后拿到的是JSON字符串 decrypted_str = pubnub.decrypt("RandomCipherKey", received_secret_msg) msg = json.loads(decrypted_str) # 之后就可以正常取msg["freq"]等字段了
内容的提问来源于stack exchange,提问作者Rajinder Dua
相关产品推荐
相关产品推荐

