2013-08-28 43 views
1

我目前正在研究一個Python腳本,它能夠隱藏所有二進制文件。它通過讀取目標文件中的所有二進制數據,然後將其存儲在其自身的列表中。然後刪除文件以隱藏它。嘗試在我的一個Python腳本文件中存儲原始字節

這是我的問題: 當我將讀取的字節存儲在腳本文件中時,Python抱怨說它不是UTF-8編碼。 這裏是如何,我讀看起來像原始數據的小樣本:

ßëM€€Ê yQtm×ßü«WTª¼É[–±Ê 

我如何可以存儲,不會損壞腳本這些字節?我想我可以將每個字節存儲爲 代碼點,以便解釋器接受它。但是,如何告訴write() - I/O函數將字節寫爲代碼點?

+0

有趣 - 用例究竟是什麼?刪除文件後腳本無法正常運行 - 腳本無法再運行,對吧? (除非它可以重新生產,但是有什麼意義......) –

+0

大概這是Python 3?你如何將字節存儲爲字符串列表? –

+0

你是什麼意思「在自己內部的列表」? –

回答

5

您應該編碼二進制文件 - 例如,使用base64編譯 - 將字節轉換爲「合法字符」。然後,當您需要二進制信息時,將其轉換回來。

有關代碼示例,請參閱this earlier question

一個簡短的樣品讓你去:

# assume your bytes came from a file: 
bytesIneed = bytearray([234,232,231,188,122,132,145]) 
import base64 

bytesConverted = base64.b64encode(bytesIneed) 

print "encoded string: " 
print bytesConverted 

bytesRecovered = base64.b64decode(bytesConverted) 

print "decoded binary: " 
for c in bytesRecovered: print(ord(c)) 

這將返回以下輸出:

encoded string: 
6ujnvHqEkQ== 
decoded binary: 
234 
232 
231 
188 
122 
132 
145 

正如你所看到的 - 字符串6ujnvHqEkQ==可以在任何地方進行存儲;解碼功能將其重新轉換爲您需要的二進制數據。

+0

感謝您的幫助,現在它可以運作。我已經在.mp3,.mp4,.jpg和.txt文件上測試過它,它可以工作!我可以隱藏並顯示並重新創建文件! :) – user2726067

+0

只使用'bytearray'也可以。我在這裏看不到base64的需求? – Carpetsmoker

+0

問題是(根據我對問題的理解),OP希望數據作爲字符存儲在代碼中。當然,您可以像我的示例的第一行一樣使用每個字節五個字符,但是將base64字符串存儲更加緊湊。根據OP留下的評論,現在可以「隱藏並揭示」這些文件是目的。 – Floris

相關問題