我有一个python应用程序,它创建一个子进程,打开一个套接字与它通信,然后创建一个多处理.连接对象在套接字上。connection对象使用一个共享密钥(随机生成)和hmac来确保不允许其他进程通过连接进行通信。在
在Linux上,这非常有效。在windows上,我得到一个错误:
multiprocessing.AuthenticationError: digest received was wrong
密钥是随机生成的一串位,在由其stdin发送到子进程之前,将对其进行pickle处理:
^{pr2}$我仔细检查了键是否与连接的两端匹配:
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,但在随后的运行中不会出现。在
解决方案似乎是使用
os.urandom
来生成密钥,而不是上面所示的方法。我不知道为什么在这两种情况下,我们传递随机字节串都会有任何影响。从安全角度来看,该解决方案也更为正确,因为getrandbits不是用于加密的。在相关问题 更多 >
编程相关推荐