De toute évidence, ils ne sont pas destinés à être consultés, donc leur recherche serait problématique.
Une astuce que j'ai utilisée dans le passé consiste à hacher les données chiffrées avant de les chiffrer et à stocker le hachage dans une colonne indexée. Bien sûr, cela ne fonctionne que si vous recherchez la valeur entière; les valeurs partielles n'auront pas le même hachage.
Vous pouvez probablement étendre cela en créant un index de hachage "texte intégral", si vous en avez besoin, mais cela pourrait se compliquer très rapidement.
ADDENDA
Il a été suggéré d'ajouter une note de bas de page à ma réponse par un débat assez long dans le chat sur la vulnérabilité aux attaques par dictionnaire, donc je vais discuter de ce risque de sécurité potentiel pour l'approche ci-dessus.
Attaque par dictionnaire: une attaque par dictionnaire consiste à pré-hacher une liste de valeurs connues et à comparer les hachages à votre colonne hachée dans la base de données. S'ils peuvent trouver une correspondance, il est probable que la valeur connue est en fait ce qui est haché (ce n'est pas certain cependant, car les hachages ne sont pas garantis d'être uniques). Ceci est généralement atténué en hachant la valeur avec un "sel" aléatoire ajouté ou ajouté de manière à ce que le hachage ne corresponde pas au dictionnaire, mais la réponse ci-dessus ne peut pas utiliser de sel car vous perdez la possibilité de recherche.
Cette attaque est dangereuse lorsqu'il s'agit de choses comme les mots de passe: si vous créez un dictionnaire de hachages de mots de passe populaires, vous pouvez ensuite rechercher rapidement dans la table cette valeur de hachage et identifier un utilisateur qui possède un tel mot de passe et extraire efficacement les informations d'identification pour voler l'identité de cet utilisateur .
Il est moins dangereux pour les articles avec un haut degré de cardinalité, comme les SSN, les numéros de carte de crédit, les GUID, etc. (mais il y a différents risques [lire: légaux] associés à leur stockage, donc je ne suis pas enclin à vous conseiller sur leur stockage ).
La raison en est que pour qu'une attaque de dictionnaire fonctionne, vous devez avoir pré-construit un dictionnaire de valeurs possibles et leurs hachages. Vous pourriez, en théorie, créer un dictionnaire de tous les SSN possibles (un milliard de lignes, en supposant que toutes les permutations de formatage sont supprimées; plusieurs dizaines de milliers de milliards d'entrées pour les cartes de crédit) ... mais ce n'est généralement pas le but d'une attaque par dictionnaire, et devient fondamentalement comparable à une attaque par force brute où vous étudiez systématiquement chaque valeur.
Vous pouvez également rechercher un SSN ou un numéro de carte de crédit spécifique , si vous essayez de faire correspondre un SSN à une personne. Encore une fois, ce n'est généralement pas le but d'une attaque par dictionnaire, mais c'est possible, donc si c'est un risque que vous devez éviter, ma réponse n'est pas une bonne solution pour vous.
Alors voilà. Comme pour toutes les données cryptées, elles sont généralement cryptées pour une raison, alors soyez conscient de vos données et de ce contre quoi vous essayez de les protéger.