Typowym sposobem jest przechowywanie zaszyfrowanej wartości i jednokierunkowy skrót wartości. Kiedy szukasz określonej wartości, będziesz szukał haszu. W ten sposób możesz sprawnie wysyłać zapytania, bez konieczności odszyfrowywania każdego wiersz, aby znaleźć interesującą Cię wartość:
create table Table (
EncryptedColumn varbinary(max),
HashValue binary(20),
PlainA int,
PlainB varchar(256),
PlainC Datetime);
create index ndxTableHash on Table(HashValue);
select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm);
Teoretycznie możesz mieć konflikt haszujący raz na niebieskim księżycu, aby być bezpiecznym w paranoi, dodaj podwójną kontrolę w odszyfrowanej kolumnie:
select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm)
and DecryptByKey(..., EncryptedColumn) = @searchTerm;
Zobacz też Indeksowanie zaszyfrowanych danych i SQL Server 2005:wyszukiwanie zaszyfrowanych danych .