python multiprocessing.connection报告“AuthenticationError:收到的摘要错了”

时间:2013-01-12 02:48:32

标签: python multiprocessing

我有一个python应用程序,它创建一个子进程,打开一个套接字与之通信,然后在套接字上创建一个multiprocessing.connection对象。连接对象使用共享密钥(随机生成)和hmac,以确保不允许其他进程通过连接进行通信。

在Linux上,这非常有效。在Windows上,我收到错误:

multiprocessing.AuthenticationError: digest received was wrong

密钥是一串随机生成的位,在被stdin发送到子进程之前被腌制:

authkey = ''.join([chr(random.getrandbits(7)) for i in range(20)])

我已经仔细检查了连接两端的密钥匹配:

 print "key:", ' '.join([str(ord(x)) for x in authkey])

服务器以:

启动
 l = multiprocessing.connection.Listener(
         ('localhost', int(port)), authkey=authkey)

..客户端以:

开头
 c = multiprocessing.connection.Client(
         ('localhost', int(port)), authkey=authkey)

两个进程都在同一台机器上运行,使用相同版本的python。

更奇怪的是,我发现如果我修复了密钥(例如,authkey ='test'),那么我第一次运行程序时仍然会收到AuthenticationError,但后续运行时却没有。

1 个答案:

答案 0 :(得分:0)

解决方案似乎是使用os.urandom生成密钥而不是上面显示的方法。我不知道为什么会产生任何影响 - 在任何一种情况下我们都会传递随机字节字符串。从安全角度来看,解决方案也更加正确,因为getrandbits不适合加密使用。