【问题标题】:pubnub clear message to a "chipered" channelpubnub 向“chipered”频道发送明确消息
【发布时间】:2014-10-28 21:17:03
【问题描述】:

PubNub 上的新人,并对它产生了兴趣。尝试一些简单的例子来理解

from Pubnub import Pubnub
import sys

SUB_KEY = "xxxxxxxxxx"
PUB_KEY = "yyyyyyyyyy"
CHIPER_KEY = "zzzzzzzzz"
channel = 'hello_world'


pubnub = Pubnub(publish_key=PUB_KEY, subscribe_key=SUB_KEY, cipher_key=CHIPER_KEY,ssl_on=True)

# Listen for Messages
def callback(message, channel):
    try:
       if message == "":
            print ("message not valid")
       else:
            print(message)
            if message['text'] == "close":
                pubnub.unsubscribe(channel=channel)
    except:
        print ("xxx")

def error(message):
    print("ERROR : " + str(message))


def connect(message):
    print("CONNECTED")


def reconnect(message):
    print("RECONNECTED")


def disconnect(message):
    print("DISCONNECTED")

try:
    pubnub.subscribe(channel, callback=callback, error=error, connect=connect, reconnect=reconnect, disconnect=disconnect)
except:
    print "Unexpected error:", sys.exc_info()[0]

我有这个简单的服务器订阅一个频道并打印出收到的消息。 现在我启用了加密,在一种情况下一切正常,在第二种情况下它不起作用。更多详情

想象一下,恶意用户掌握了我的 PUB_KEY 和频道名称,他可以向我的频道发布消息。但是他不知道我的 CHIPER_KEY(它不在任何地方托管,我已经生成并控制它)

在这种情况下,我的服务器崩溃了:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 505, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Pubnub.py", line 1281, in run
    _invoke(self.pubnub.latest_sub_callback['callback'], data)
  File "/usr/local/lib/python2.7/dist-packages/Pubnub.py", line 1254, in _invoke
    func(get_data_for_user(data))
  File "/usr/local/lib/python2.7/dist-packages/Pubnub.py", line 1074, in sub_callback
    _invoke(chobj['callback'], self.decrypt(r),
  File "/usr/local/lib/python2.7/dist-packages/Pubnub.py", line 544, in decrypt
    message = self.pc.decrypt(self.cipher_key, message)
  File "/usr/local/lib/python2.7/dist-packages/Pubnub.py", line 156, in decrypt
    plain = self.depad(cipher.decrypt(decodestring(msg)))
  File "/usr/lib/python2.7/base64.py", line 321, in decodestring
    return binascii.a2b_base64(s)
TypeError: must be string or buffer, not dict

我在这里的理解是,这是失败的,因为接收到的消息(明确)是一个 dict 并且由 pubnub.py 调用的 binascii.a2b_base64(s) 需要一个字符串(如果消息被加密是一个字符串)

知道如何解决这个问题吗?

非常感谢 安东尼奥

【问题讨论】:

    标签: encryption pubnub


    【解决方案1】:

    它肯定不会在密文上崩溃,这是一个错误,我们会尽快修复它!

    同时,为了防止用户获取您的发布密钥,您可以使用 PAM 进一步确定对频道的发布(或订阅访问):

    https://github.com/pubnub/python/tree/master/python#grant

    更多关于 PAM 和 PubNub 安全性的一般信息也可在此处获得:http://www.pubnub.com/docs/java/android/overview/security.html

    杰瑞米

    【讨论】:

    • Geremy,谢谢快速回复。 PAM 当然是您建议的正确方法。安东尼奥
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2021-08-21
    相关资源
    最近更新 更多