1

サブプロセスを作成し、それと通信するためにソケットを開いてから、ソケット上にmultiprocessing.connectionオブジェクトを作成するPythonアプリケーションがあります。接続オブジェクトは、共有キー(ランダムに生成された)と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が発生しますが、その後の実行では発生しません。

4

1 に答える 1

1

os.urandom解決策は、上記の方法ではなく、キーの生成に使用することです。なぜこれが影響するのかはわかりません。どちらの場合も、ランダムなバイト文字列を渡しています。getrandbits は暗号化の使用を意図していないため、このソリューションはセキュリティの観点からもより正確です。

于 2013-01-20T02:54:17.877 に答える