【发布时间】: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