Som beskrivits kan du inte. Svaret du har gett är hur du skulle uppnå det om du inte behöver optimera det.
Om du behöver optimera det utan att helt att äventyra det krypterade värdet och ha profilerat för att hitta mängden data som returneras och bearbetas av ditt filter är en viktig orsak till förseningar, kan du göra följande.
Lägg till ett nytt fält i tabellen som kommer att lagra en delmängd av en hash. Beroende på antalet unika e-postadresser kan du ställa in hur stor denna delmängd är. Obs:Mindre desto bättre, eftersom du läcker information om det krypterade värdet med detta tillvägagångssätt. Om du till exempel lagrar en hash på 1 byte av e-postadressen, minskar du krypteringens entropin med ~8 bitar.
När du frågar, skapa först e-posthashens underuppsättning och placera en where
sats för att endast returnera dessa rader.
Allt detta förutsätter att hashfunktionen är billigare än dekrypteringssteget. Det här tillvägagångssättet skulle kräva att du räknar om alla hash-undergrupper om du vill öka dess storlek, så att välja en storlek som på ett meningsfullt sätt ökar prestandan, inte onödigt äventyrar krypteringen och troligen inte behöver ändras när du växer är viktigt .
Obs:Du bör inte använda en rak hash som MD5 i den här situationen. Inte för att det är känsligt för kollisioner, utan för att nyckelutrymmet kommer att vara så litet. Om prestandan är viktig och du lagrar stora mängder data, öppnar du själv DOS-attacker där angriparen skapar stora mängder e-postadresser som alla hash till samma delmängd. För att skärpa mot det här problemet, använd en HMAC funktion med en hemlig nyckel.
Kom ihåg att om du inte har verkliga prestandaskäl för att behöva lägga till komplexitet – gör det inte