2012-01-05 49 views
1

我想創建一個基本的登錄,在C++中創建帳戶系統,其中基本上提示用戶輸入用戶名和密碼或創建一個新帳戶。在創建新帳戶的選項中,用戶輸入一些保存在文件中的詳細信息,但我不希望這些數據是可編輯的。有沒有辦法讓數據無法訪問?我的操作系統是Windows。將C++中的數據保存到用戶無法訪問的文件中?

+0

這非常依賴於您的操作系統。 – filmor 2012-01-05 16:49:21

+0

太模糊。高度的應用程序和平臺特定。而且可能是一個傻瓜的差事。 – 2012-01-05 16:49:29

+0

我的操作系統是Windows。 – Bugster 2012-01-05 16:50:54

回答

2

如果用戶確實想要訪問該文件,則無法阻止它們。 在大多數情況下,一個簡單的答案就是隱藏該文件,通過更改其屬性(在Windows上)或在點名前添加一個點(在Unix上)。

請參閱 http://msdn.microsoft.com/en-us/library/windows/desktop/aa365535(v=vs.85).aspx 設置隱藏屬性。

+0

那麼,如果登錄系統將作爲一個不同的用戶運行,將有一個很好的機會,使文件完全無法訪問。 – filmor 2012-01-05 16:56:44

1

最簡單但不是非常安全的良知是寫入二進制文件。

這樣做的「正確」方法可能是散列數據,然後寫入二進制文件。

+0

加密它,也許,甚至? – Potatoswatter 2012-01-05 18:22:48

+0

@Patatoswatter:那也是。:) – Casey 2012-01-06 15:21:33

1

使用2路加密算法,如AES。然後,如@Casey所說,將其寫入二進制文件。

您還需要一個密鑰來加密/解密數據,這意味着您的應用程序需要將密鑰存儲在您提供的應用程序的.exe.dll中。其中的一個缺點是,一個真正的技術用戶理論上可以使用二進制編輯器搜索.exe或.dll,並且可能只是找出密鑰,但我猜測這個數字或者這樣的用戶會少得多。

否則,您可以擁有云密鑰庫並從那裏檢索數據。

你應該從C編寫的因特網上獲得不少AES庫(它們通常是一個文件長),所以你應該使用它們來代替自己實現。

編輯:在重新閱讀帖子時,如果您的祕密數據是驗證所必需的,那麼您真正需要的是影子文件。 Unix系統維護一個/etc/shadow,其中包含密碼的MD5散列(單向散列)。因此,當用戶下次輸入密碼時,您只需驗證新密碼的散列是否與存儲的散列匹配。這種方法的優點是沒有人可以讀取實際的密碼。

+0

這很有幫助。謝謝! – Bugster 2012-01-05 17:15:07

1

您可以混淆寫入二進制文件的方式,爲其創建校驗和,將校驗和附加到開頭,中間或結尾,對其進行加密,並在加密後再次附加另一個校驗和。如果所有校驗和不匹配,顯然文件已被泄漏。

儘管所有這些都不會阻止用戶實際編輯該文件,但它將無法以任何有意義的方式爲除最確定的用戶以外的所有用戶編輯該文件。

當然,如果一個文件被編輯,它是不可用的,但你甚至可以創建和存儲恢復信息,如奇偶校驗文件來解決。

1

你看過備用數據流嗎?基本上,大多數流行的文件系統上的文件可以是二維的。通常,用戶只使用零數據流,但文件系統可以支持並行數據流,但大多數人不知道這些數據流是存在的,因此他們從未看過。事實上,大多數工具忽略任何東西,但流零,所以他們甚至可能無法複製這些文件!

Alternate Data Streams

您可以使用此沿邊任何其他建議。