2014-10-28 43 views
1

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)期望一个字符串(如果邮件加密是一个字符串)

任何想法如何克服这一点问题?

非常感谢 安东尼

回答

0

这当然不应该对密文崩溃,那是一个错误,我们会尽快将其修复!

在此期间,以减轻用户得到您发布关键的一抱,你可以使用PAM进一步明确发布(或订阅访问)渠道:如何

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

更多信息PAM和PubNub安全,一般也可以在这里:http://www.pubnub.com/docs/java/android/overview/security.html

geremy

+0

geremy,日Thnx的快速回复。按照您的建议,PAM肯定是正确的选择。安东尼奥 – 2014-10-29 12:23:54