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 来自随机值列表。然后,您可以将 pool.map 与 myprocessing 一起使用并写入结果。

于 2012-06-13T15:48:52.157 回答