PubNub上的新功能对此感兴趣。尝试一些简单的例子来了解pubnub将消息清除到“chipered”频道
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
这里我的理解是,这是失败的作为收到的消息(这是明确的)是一个字典和pubnub.py调用binascii.a2b_base64(s)期望一个字符串(如果邮件加密是一个字符串)
任何想法如何克服这一点问题?
非常感谢 安东尼
geremy,日Thnx的快速回复。按照您的建议,PAM肯定是正确的选择。安东尼奥 – 2014-10-29 12:23:54