我想在python中做一個簡單的加密腳本。我只是想在二進制文件上使用XOR加密。 我的劇本基本上是這樣的:Python中的二進制文件Xor加密
def xor_c (a):
v=''
for p in a:
v += chr((ord(p)^0xA8))
return v
這樣做的目的只是每個字節單獨進行加密。 這應該工作,但我做的所有嘗試失敗。
我第一次嘗試:
handler = open("file",'r')
handler2 = open("output",'w')
contents = handler.read()
handler2.write(xor_c(xor_c(contents)))
但執行後的兩個文件file
和output
是不同的。 由於輸入文件是一個二進制文件(我想要什麼),我已經改變了腳本:
handler = open("file",'rb')
handler2 = open("output",'wb')
contents = handler.read()
handler2.write(xor_c(xor_c(contents)))
但這並沒有改變任何東西。 從它看起來像,一些字節夫婦在輸出中只有一個字節轉換(也許是因爲字符不是ascii,但這不應該發生在二進制模式...)。而且輸出的最後一個字節是0xA8
(邏輯從\0
的在輸入文件的末尾轉換得到考慮到這一點我也改變了xor_c
功能:
def xor_c (a):
v=''
for p in a:
v += chr((ord(p)^0xA8))
return v[:-1]+'\0'
爲了確保最後人物將永遠是一個\0
但是這也不行。
有什麼建議?評論?祕訣?
感謝
您的代碼在我的電腦上正常工作,並且'handler2'包含與'handler'完全相同的數據。順便說一下:你的'xor_c'效率非常低。我會創建一個轉換表並使用'str.translate'來代替。 – Bakuriu
如果某些字符由多個字節表示,則它可能是一個unicode文件。 Python 2.x和3.x需要不同的方法,所以一個聲明,你使用的版本會有所幫助。 – guidot
@guidot:我正在使用python 2.7。 @Bakuriu:我不明白我可以如何使用'str.translate()'來重新創建我想要的東西。 – ibi0tux