2011-05-19 81 views
0

我正在用C++使用friend關鍵字和運算符重載(>> < <)來完成我的第一個序列化程序。使用運算符的C++序列化文件>>

我存儲序列化對象的文件叫做file.CARS,當然存儲汽車對象。

我創造這樣說:

std::ofstream output(file.CARS, std::ios::binary); 

的文件被創建,我可以在我的對象存儲在那裏,沒有問題。無論我發現什麼東西:

該文件被稱爲file.CARS,我認爲ios :: binary和「unknown」擴展名(* .CARS)將幫助我防止它被一個簡單的文本編輯器打開。

我錯了......和內容可以看出,並通過一個簡單的文本編輯器進行修改......

有沒有一種方法,我可以「保護」這個文件?

非常感謝您的幫助。

+0

你能告訴我們你是如何重載操作員嗎? – 2011-05-19 19:40:48

+0

你想防止什麼?僅修改?修改和閱讀?有什麼特別要保護它嗎? – 2011-05-19 19:49:09

+2

任何文件都可以通過簡單的文本編輯器進行修改。 – 2011-05-19 19:54:09

回答

3

不使用標準C++。 binary標誌只是說明如何處理行尾。而所有文件都是二進制格式 - 這就是計算機的全部內容!您可能要閱讀encryption

1

如果您要存儲ASCII字符串,那麼轉換爲二進制文件並沒有做任何事情...... ASCII字符串已經存儲爲二進制數據,即「hello world」,在實際內存中存儲爲(in十六進制):

0x68 0x65 0x6c 0x6c 0x6f 0x20 0x77 0x6f 0x72 0x6c 0x64 

當你寫這些內存字節的磁盤,無論它是一個ASCII模式或二進制模式,你會與存儲在磁盤存儲相同的字符串結束了。因此,任何簡單的文本編輯器都會從磁盤讀取內存並重新解釋字節,只會打印出您保存的ASCII字符串。

如果你不想讓別人打開你的文件並閱讀你的ASCII字符串,那麼你將不得不以某種方式來爭奪他們。如果加密過於強硬,您可以做一些簡單的事情,例如交換符號位(對於已簽名的ASCII char),將值抵消一定量(注意環繞),做一些輕鬆操作加權運行長度編碼壓縮等等。只要確保當你讀取數值時,你恰當地反轉你最初應用於數據的任何變換。