2011-04-08 69 views
1

我有一堆AES256加密的ZIP容器(使用DotNetZip),並且我正在編寫一個程序來幫助用戶瞭解它們內部的內容。我會發布帶有XML文檔的「啓動器」程序,我也在AES256中加密「元數據」以便說話。爲了方便起見,我正考慮使用XML文檔中強大的AES256字符串將密碼加密到各種(1-10 + zip文件)中(因此用戶只需輸入一次)。它讓我感到不安,但是我們所做的一些「可用性」測試顯示人們不想輸入密碼7次。解密密碼的最佳方法(從安全角度來看)

因此,假設字符串在XML/dat /任何文件中被完全加密,那麼我的程序中的其他「因素」是多少?我必須對解密/ IV/salt/etc進行硬編碼(或者至少將其傳遞給deypcrtion方法)否?

我一直在試圖理解像DotNetCrack(http://www.dotnetcrack.com/)這樣的東西可以很容易地從我的程序中獲得。我知道沒有什麼是完美的,記憶傾銷是一個巨大的問題,但我想至少繞過那些非常簡單的「腳本小子」的東西。

我看過安全字符串,但它看起來像一個愚蠢的解決方案,所以你最終必須解密。

爲了清晰起見進行編輯 - ZIP文件是自動提取器,例如,只需將文件壓縮到EXE中即可。它們可能是拉鍊,無論哪種方式都沒關係。我的程序只是爲了幫助某人提取所有內容而無需點擊每一個內容,並幫助他們瀏覽ZIP,這可能會讓新手用戶感到困惑。

我所有的程序都在讀取帶有關於每個zip文件的「data」的XML文件(例如zip001是「來自john smith等的信息」 - 但zip文件名稱與BOBSMITH_INFO_001.EXE(.zip)

+1

這個問題並不十分清楚:您是否將自己的XML文件與ZIP文件一起發送到自動提取器中?你的程序是一個自動提取器,還是隻是檢查一些ZIP文件並報告它們?如果存儲目標是避免用戶多次輸入密碼,那麼爲什麼將密碼存儲在XML文件中,而不是在處理N個文件時將其保存在內存中? – kdt 2011-04-08 15:07:25

+1

你應該花一些時間來接受一些答案。 :) – Yetti 2011-04-08 15:33:10

+1

哎呦。通過並接受了東西。希望它更新迅速。還做了一個編輯來澄清我的程序的功能。 – Jai 2011-04-08 15:39:06

回答

1

這是一個問題當我們談論obfuscation電子書之間的戰爭永遠不會結束,所以基本上你可以停止腳本kiddie的基本技術,如硬編碼加密版本的關鍵和解密之前使用應該工作,但後來再次,這取決於你的腳本kiddie是如何動機!

說,你可以檢查Reflector和ILDAS M(在vs工具中)看到在幾秒鐘內找到任何硬編碼的字符串!你也應該知道.net被編譯爲IL,這是一個非常高的級別,因此易於閱讀中間語言。所以像一個非常簡單的混淆如XOR密鑰和硬編碼很容易跟蹤甚至通過腳本kidie。

至於解決方案,使用多級加密。保持密鑰分裂在多個地方加密。甚至可以嘗試編寫一個在運行時生成密鑰的算法。在你做了所有這些之後,使用混淆器將事情進一步複雜化。

祝你好運。

+0

謝謝。我會盡可能地遵循你的建議。雖然,這種經歷讓我覺得在.NET C#中加密是一個壞主意。 – Jai 2011-04-08 15:42:09

+0

完全不是,一個好的加密算法大部分都是開源的,所以每個人都有機會測試它的健壯性。應該保持隱藏的是關鍵,爲此我同意你的看法。隱藏事情.net不是要走的路。事件混淆的IL代碼比機器代碼更容易閱讀。 – Mehran 2011-04-08 18:12:25