更好的解決方案是儲存MD5時,它編譯到您的應用...您的應用程序可以那麼就參考這個常量字符串在配置文件中。但是MD5並不僅僅是配置文件,還包括MD5中的一些祕密的「key」值,比如固定的guid。
write(MD5(SecretKey + ConfigFileText));
然後,您只需刪除該MD5並重新散列該文件(包括您的密鑰)。如果MD5是相同的,那麼沒有人修改它。這可以防止某人修改它並重新應用MD5,因爲他們不知道您的密鑰。
請記住,這是一個相當薄弱的解決方案(就像你建議的那樣),因爲他們可以輕鬆追蹤到你的程序中以找到密鑰或存儲MD5的位置。
更好的解決方案是使用公鑰系統並簽署配置文件。這又是一個弱點,因爲這需要將私鑰存儲在本地機器上。幾乎所有包含在本地PC上的東西都可以被足夠的努力繞過。
如果您真的想要將信息存儲在您的可執行文件中(我會勸阻),那麼您可以嘗試在EXE結尾附加它。這通常是安全的。修改可執行程序是病毒,如行爲,大多數操作系統安全性也會試圖阻止你。如果您的程序位於Program Files目錄中,並且您的配置文件位於Application Data目錄中,並且用戶以非管理員身份(在XP或Vista中)登錄,則您將無法更新EXE。
更新:如果您使用的非對稱加密我不在乎,RSA或量子密碼,如果你是存儲您在用戶的計算機上的按鍵(你必須做,除非你的路線這一切通過網絡服務),那麼用戶可以找到您的密鑰,即使這意味着在運行時檢查CPU上的寄存器!你只是爲自己購買一個適度的安全級別,所以堅持一些簡單的事情。爲了防止修改,我建議的解決方案是最好的。爲了防止讀取然後對其進行加密,並且如果您在本地存儲密鑰,則使用AES Rijndael。
更新: FixedGUID/SecretKey可以替代地在安裝時生成並存儲在註冊表中的某處「祕密」。或者,您可以在每次從硬件配置中使用它時生成它。然後你變得越來越複雜。如何做到這一點以允許適度的硬件更改將採取6個不同的簽名,並將您的配置文件散列6次 - 每次簽名一次。將每一個與第二個祕密值結合起來,如上面提到的GUID(全局或安裝時生成)。然後當你檢查你分別驗證每個散列。只要他們有6個(或者任何你的寬容),那麼你接受它。下一次你寫它時,你用新的硬件配置來散列它。這可以讓他們慢慢地換掉硬件,並獲得一個全新的系統。 。 。也許這是一個弱點。這一切都歸結於你的寬容。基於更嚴格的容差存在變化。
更新:對於信用卡系統,你可能想考慮一些真正的安全。您應該保留安全和加密顧問的服務。更多信息需要交換。他們需要分析您的具體需求和風險。另外,如果你想要.NET的安全性,你需要先從一個非常好的.NET混淆器(just Google it)開始。 .NET程序集是輕鬆拆卸和獲取源代碼並閱讀所有祕密的方式。不要聽起來像一個破碎的記錄,但依賴於用戶系統安全的任何事情從一開始就有根本的缺陷。
就在一張小紙條上,即使用C++編寫,如果你發送/存儲祕密,你冒着被冒着冒險的危險(這是這裏的關鍵部分)。在這裏獲得適當安全的唯一可靠途徑就是永遠不要發送祕密。很可能您需要某種兩部分加密方式,從而使用用戶和您自己的私鑰。正如Jim所說,你需要一個適當的安全分析師和專業建議。 – Gregory 2009-12-30 04:32:19