De typische manier is om zowel de versleutelde waarde en . op te slaan een one-way hash van de waarde. Wanneer u een specifieke waarde zoekt, zoekt u naar de hash. Op deze manier kunt u efficiënt query's uitvoeren, zonder dat u elke . hoeft te decoderen rij om de waarde te vinden waarin u geïnteresseerd bent:
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);
In theorie kun je een keer in een blauwe maan een hash-conflict hebben, om paranoïde veilig te zijn, voeg je een dubbele controle toe aan de gedecodeerde kolom:
select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm)
and DecryptByKey(..., EncryptedColumn) = @searchTerm;
Zie ook Versleutelde gegevens indexeren en SQL Server 2005:versleutelde gegevens zoeken .