2012-06-13 48 views
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被並行化?

+0

你的問題到底是什麼?你期望什麼樣的答案「你覺得怎麼樣?」 –

+0

對不起,如果這不乾淨 –

+0

我的意思是,該源可能使用多進程轉換應用程序 –

回答

3

通常你會打破文件分成部分併發送各部分獨立的過程多,而是因爲你需要生成隨機數的順序從同一種子不會在這種情況下工作。

如果你願意改變加密算法有一些的,你可以將它設置成能夠處理多個塊的替代方法。但是「流密碼」特別不適用於這種事情。

你可以首先生成隨機數,然後喂這些生成的數字多進程與他們的位置一起,但更可能耽誤你比你加快了。

所以我會說「不」,你不能讓它多處理,至少不能以實際的方式。

(我假設這是一個實驗或學習鍛鍊,你不是想用這個嚴肅的加密。如果你想使用它的正經事,有很多功能齊全的加密庫函數)

1

您不能並行化IO操作。所以你應該做的是讀取輸入文件,創建一個隨機值列表,然後使用多處理創建字符串。然後你可以把它寫到你的輸出文件中。要做到這一點,創建像一個函數:

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

位來自F1。 randVal來自隨機值列表。然後,您可以使用myprocessing使用pool.map並寫入結果。

相關問題