1

このコードは次のサイトから取得されます:http://code.activestate.com/recipes/577090-file-encryption-using-stream-cipher/

import sys 
import random 

if len(sys.argv) != 4: 
    print "Usage: encdec_.py longintkey [path]filename1 [path]filename2" 
    sys.exit()   
random.seed(long(sys.argv[1])) # key 
f1 = open( sys.argv[2], "rb") 
bytearr = map (ord, f1.read () ) 
f2 = open( sys.argv[3], "wb" ) 
for i in range(len(bytearr)): 
    f2.write(chr(bytearr[i] ^ random.randint(0, 255))) 
f1.close() 
f2.close() 

このコードは?を使用して並列化できますmultiprocessingか?

4

2 に答える 2

3

通常、ファイルをセクションに分割し、各セクションを別々のプロセスに送信してマルチプロセッシングを行いますが、同じシードから乱数を順番に生成する必要があるため、この場合は機能しません。

暗号化アルゴリズムを変更する場合は、複数のチャンクを処理できるように設定できる代替方法がいくつかあります。しかし、「ストリーム暗号」は、特にそのようなことには簡単には向いていません。

最初に乱数を生成してから、それらの生成された数値をそれらの位置とともに複数のプロセスにフィードすることもできますが、それは速度を上げるよりも遅くする可能性が高くなります。

だから私は「いいえ」と言います、少なくとも実用的な方法では、それをマルチプロセッシングにすることはできません。

(これは実験または学習演習であり、深刻な暗号化に使用しようとしているのではないと思います。深刻な暗号化に使用しようとしている場合は、フル機能の暗号化ライブラリ機能を多数選択できます。)

于 2012-06-13T15:47:22.873 に答える
1

IO操作を並列化することはできません。したがって、入力ファイルを読み取り、ランダムな値のリストを作成してから、マルチプロセッシングを使用して文字列を作成する必要があります。次に、それを出力ファイルに書き込むことができます。これを行うには、次のような関数を作成します。

def myprocessing(args):
    byte, randVal = args
    return chr(ord(byte) ^ randVal)

バイトはf1から来ます。randValは、ランダムな値のリストから取得されます。次に、myprocessingでpool.mapを使用して、結果を書き込むことができます。

于 2012-06-13T15:48:52.157 に答える