SQL SHA1 à l'intérieur OÙ
Dans mon programme, nous stockons l'adresse IP de l'utilisateur dans un dossier. Lorsque l'on affiche une liste de dossiers pour un utilisateur, nous ne voulons pas donner l'autre IP de l'utilisateur, de sorte que nous hash SHA1 il. Ensuite, lorsque l'utilisateur clique sur un dossier, il va à une URL comme ceci:
http://www.example.com/allrecordsbyipaddress.php?ipaddress=SHA1HASHOFTHEIPADDRESS
Maintenant, j'ai besoin de la liste de tous les dossiers par l'adresse IP spécifiée dans le hash SHA1. J'ai essayé ceci:
SELECT * FROM records
WHERE SHA1(IPADDRESS)="da39a3ee5e6b4b0d3255bfef95601890afd80709"
mais cela ne fonctionne pas. Comment puis-je faire?
Merci,
Isaac Waller
- Pourquoi avez-vous simplement d'utiliser un hachage au lieu de l'adresse IP?
- Avec cette approche, vous êtes le calcul de la SHA1 de toutes les adresses dans la base de données chaque fois que vous faites une requête. Qui sera étonnamment lent et consomme de grandes quantités de PROCESSEUR.
Vous devez vous connecter pour publier un commentaire.
J'avais stocker le SHA1 de l'IP dans la base de données avec le raw IP, de sorte que la requête serait devenu
Puis je m'assurerais que le SHA1 de calcul qui se passe exactement un lieu dans le code, de sorte qu'il n'y a pas de possibilité pour faire un peu différemment dans plusieurs endroits. Que vous donne également la possibilité de mélanger du sel dans le calcul, de sorte que quelqu'un ne peut pas simplement calculer le SHA1 sur une adresse IP qui les intéresse et le passer dans la main.
Stocker le hash SHA1 de la base de données vous donne également la possibilité d'ajouter un index secondaire sur ip_sha1 accélérer la SÉLECTIONNER. Si vous avez un très grand ensemble de données, de faire le SHA1 dans les clauses where forces de la base de données, procéder à une analyse de la table, ainsi que de refaire un calcul pour chaque enregistrement à chaque balayage.
Ne sais pas si ça compte, mais votre
SHA1
de hachageda39a3ee5e6b4b0d3255bfef95601890afd80709
est bien connu, les hash d'une chaîne vide.Est-ce juste un exemple ou vous avez oublié de fournir une
IP
adresse pour le calcul de hachage fonction?Mise à jour:
Votre page web le code générer
SHA1
hachages en minuscules?Cette vérification échoue dans
MySQL
:Dans ce cas, utilisez ceci:
qui va réussir.
Aussi, vous pouvez précalculer les
SHA1
de hachage lorsque vous insérez les enregistrements dans la table:Ce sera le retour de l'original
IP
et autoriser l'indexation deip_sha
, de sorte que cette requête va travailler rapidement.Chaque fois que j'ai eu un imprévu de hachage incompatibilité, c'est parce que j'ai accidentellement haché une chaîne qui comprenait certains espaces, tels que "
\n
".Juste une pensée rapide: c'est un très simple de l'obscurcissement. Il y a seulement 232 les adresses IP possibles, donc si quelqu'un avec des connaissances techniques voulu le comprendre, ils pouvaient le faire par le calcul de toutes les 4 milliards de tables de hachage, ce qui ne serait pas très long. En fonction de la sensibilité de ces adresses ip, vous pouvez envisager de privé la table de choix.
Avez-vous comparer la sortie de votre algorithme de hachage avec la sortie de MySQL SHA1()? Par exemple pour l'adresse IP 1.2.3.4?
J'ai fini crypter les adresses IP, et le décryptage sur l'autre page. Alors je peux utiliser le raw adresse IP dans la requête SQL. Aussi, il protège contre les attaques par force brute, comme L'autocratie dit.