2013-02-08 108 views
0

我剛剛開始使用C#和SQlite數據庫(具有敏感信息)開發桌面應用程序,該數據庫將安裝在任何本地PC上。我想將數據庫密碼和sql命令存儲在安全的地方。我對此有一些疑問:如何在C#和Sqlite安全中隱藏數據庫密碼

  1. 您認爲SQlite數據庫有多安全?我已閱讀 ,通過添加加密,整個文件被加密,甚至 標題。你認爲這有多安全?
  2. 要存儲密碼,有很多選擇(有些可能是我正在考慮的簡單建議): a)將密碼和SQL命令存儲在dll文件中並對其進行模糊處理。但是有沒有人嘗試過使用Olly Debugger來破解或者搜索它? b)在app.config文件中加密它,自定義加密。但我讀過幾篇文章和加密連接字符串似乎是可破解的...... c)將密碼放在一個XML文件中並加密它或者在一個序列化的文件中(但是加密也將被存儲在一個源代碼並可以被折射)。
  3. 如果應用程序被混淆並且數據庫被加密。你認爲會有任何性能問題嗎?

謝謝。

+0

裸SQLite不加密數據庫,但有一些擴展,你可能想看看:http://www.hwaci.com/sw/sqlite/see.html,http://sqlcipher.net/ – thang

+0

當然,我沒有使用裸的sqlite,我使用SQlite Expert Professional或sqlite.org提供的dll來加密它。我試過在文本編輯器中打開文件,它似乎被加密。 – tomyake

+0

你怎麼知道它是加密的?我認爲很多時候,很難用眼睛來分辨。加密擴展可以在OFB模式下執行AES-256,這可能相當不錯。我認爲只看到船隻是源代碼,所以如果你得到的DLL,可能是它不是內置... – thang

回答

0

你需要問自己什麼是你正試圖抵禦和什麼。您可以在純粹的客戶端安裝的應用程序中執行任何操作,特別是可管理的應用程序,可以輕鬆破解。軟件狗更耐破壞,但如果收益足夠大,不會阻止經驗豐富的黑客,而且它們既昂貴又給用戶和分銷商帶來痛苦。保護您的應用程序的唯一可靠方法是在您自己的服務器上運行敏感部分。在你的情況下,數據庫可以駐留在服務器上,那麼你可以給出單獨的密碼,檢查IP地址,限制查詢速度,以防止刮等

OTOH如果你的唯一目的是保護你對休閒數據庫技術知識匱乏的人的興趣,數據庫加密的任何方案以及配置文件中比純文本更復雜的密碼存儲方案都可以工作。

+0

你對混淆有什麼看法?它是否也可以輕鬆破解? – tomyake

+0

混淆本身不能*破解*(即原始標識符無法恢復),但不需要。對CLR程序集和p/invokes的引用不能被混淆,並且字符串/資源加密方案接近無用。這些爲黑客提供足夠的信息來查找密碼和/或從混淆的程序中移除保護。 –