2011-06-27 95 views
11

我知道這可能是這個問題的重複:How to encrypt data in sql server and decrypt it in .net apps - 但這是近一年前問,我希望有可能有進步或什麼。加密在SQL Server /解密在.Net 4

無論如何,我們有一個應用程序,FTP文件從一個位置到另一個,顯然FTP配置文件需要一個密碼。我們有一個包含配置文件所有細節的數據庫,但我們需要對密碼進行加密。我們曾想過在SQL中解密它們,然後將它們發送到應用程序,但這意味着要通過網絡發送它,這是我們不想要的。

我們希望加密存儲的密碼,將詳細信息傳遞給應用程序,然後在應用程序中解密它們。

這可能嗎?

從我的谷歌搜索,它似乎並不是,但我希望有人有一個技巧或什麼。

在此先感謝!

注:我正在使用.Net 4和SQL Server 2008 R2。

+0

+1明確指出,有一個類似的,但太舊的問題。 –

回答

6

使用SQL Server列加密API函數(如EncryptByKey)進行加密和解密與任何客戶端加密或解密都不兼容,因爲它使用內部未記錄的存儲格式。

由於SQL Server提供了網絡連接機密性,因此我無法確定您對通過網絡發送密碼的擔心,請參閱Encrypting Connections to SQL Server

您的最佳選擇是將密碼存儲在加密列中並使用內置的SQL Server加密功能(EncryptByKeyDecryptbyKey)或使用Transparent Database Encryption。由於TDE在各個方面都優於列級加密,所以標準也選擇其中之一,主要是授權要求(TDE要求企業版)。無論您選擇什麼解決方案,您都會很快意識到主要問題是密鑰管理,並且對於該SQL Server提供了一個可行的故事,請參閱Encryption Hierarchy。無論您如何設計解決方案,應用程序都不需要對密碼本身進行加密或解密,如果您需要這樣做,那麼您顯然已經走上了錯誤的道路(因爲應用程序本身無法管理密鑰),所以永遠不會出現CLR加密和SQL加密兼容問題。

1

Simpy對.net中的密碼進行加密和解密,就SQL而言,它只是存儲文本。

+0

密碼最初存儲在數據庫中,它們不是來自應用程序,所以這不適用! –

-1

在我看來,「明顯的答案」是你需要在SQL服務器和dotNet中使用相同的算法(或適當的匹配的加密/解密對)。因爲前者使用T-SQL,而後者使用託管代碼語言(如C#/ VB),所以必須用不同語言編寫/源代碼算法的兩部分。育。

您是否想過使用SQL CLR?這樣你就可以在C#中編寫兩部分,並從SQL運行該代碼。

我已經有一個this副本坐在我的書架上一段時間,但從未深入研究過 - 主要是因爲雖然本質上非常酷 - 但我從未發現需要使用SQLCLR。但是你的問題聽起來像一個強有力的候選人:-)

HTH :-)

達明

+0

-1「世界充滿了由閱讀應用密碼學的人設計的糟糕安全系統」。這只是簡單的不好的建議,它完全省略了密鑰管理的問題,並且忽略了T-SQL crypt函數使用未記錄的存儲格式使IV和密碼文本不可用的事實。 –