2012-01-31 327 views
0

加密值我有一個ASP.NET Web應用程序使用SQL Server 2008查詢數據庫

當一個職位代碼通過Web應用程序提交的,它是加密,然後將加密值發送到數據庫並插入表格中。

我現在需要通過搜索的職位代碼相似的部分找到查詢從Web應用程序,這些職位代碼的方式:

SELECT PostCode 
FROM Table 
WHERE PostCode LIKE @PostCode + '%' 

我怎麼能做到這一點不存儲在數據庫中解密功能? (我認爲這對安全有害?)

+0

你對數據庫做了什麼樣的查詢? – 2012-01-31 14:50:47

+0

@JamieDixon - 更新了我的問題,對不起,我應該把它放在第一位! – Curt 2012-01-31 14:52:18

回答

4

這裏確實只有兩種選擇。

  1. 加密您提交給您的選擇查詢的數據。這樣你就可以比較兩個不同的加密值。當然,如果你正在使用鹽,這將失敗。

  2. 不要在存儲之前對值進行加密。相反,只需正常保存即可。如果它確實需要加密,使用的加密方法可以在SQL Server中自動加密列:http://msdn.microsoft.com/en-us/library/ms179331.aspx

你加密的目的基本上是爲了保護信息「靜止」。 SQL服務器可以自己做到這一點。

+0

+1兩個不錯的選擇。 – 2012-01-31 14:56:01

+0

乾杯,所以我不應該用這種方式加密值呢? – Curt 2012-01-31 15:05:56

+0

@Curt:如果您想要它們可搜索,請不要使用它。一般來說,密碼等字段應該用salt單向散列。您需要進行批量搜索的字段應該通過可逆加密或最好是存儲容器的加密機制來處理,在這種情況下是SQL服務器。 – NotMe 2012-01-31 16:01:20

0

因此,您將「Court」發送到您的數據庫,它存儲類似於「#&%^^」的內容,並且您希望在數據庫中查找字符串「Court」 ?

我認爲唯一的方法是加密Web應用程序上的搜索字符串(因爲您已經做了插入操作)並將其與數據庫上的加密版本進行比較。

+2

我似乎在OP問題中看到部分搜索的要求 – musefan 2012-01-31 14:57:43

+0

@musefan – Curt 2012-01-31 14:58:54

+0

上的斑點您是對的,它不適用於此案例 – Diego 2012-01-31 15:00:18

1

第一種方式

你可以從你的ASP.Net應用程序發送的加密郵編數據庫,並使用類似下面的加密郵編查詢它....

SELECT PostCode 
FROM Table 
WHERE PostCode LIKE @EncryptedPostCode + '%' 

二方式

關於查詢加密列的文章。

Encrypted Columns and SQL Server Performance

+0

+1良好的鏈接/如何指導。雖然我相信第一種方式是行不通的。 – NotMe 2012-01-31 16:27:54

+0

我在c#ASP.net,sqlserver中檢查了我的結尾。這很好用。:) – Pankaj 2012-01-31 16:30:00

+0

有趣。我本來希望那是不可能的。 – NotMe 2012-01-31 16:30:55