8797 sujets

Développement web côté serveur, CMS

Bonjour,
comme le titre l'indique j'essaie de faire une requête de recherche insensible à la casse.... Problème : la fonction LOWER() ne s'applique pas sur le retour de AES_DECRYPT(). Le retour de cette imbrication sera la valeur du champ comme il a été enregistré et non en minuscule.
De plus mon encodage est en utf8_general_ci.
Une idée ?
Modifié par Su4p (01 Mar 2012 - 17:30)
Pourtant sur la doc il y a bien écrit que AES_DECRYPT() retourne une chaine de caractère. Et que LOWER(string) renvoie bien une chaine de caractère en minuscule donc ou est le problème pour LOWER( AES_DECRYPT() ) ?!

De plus la fonction REPEAT(AES_DECRYPT(),5) fonctionne o_O j'ai bien le nom répété 5 fois ....

PS: la fonction UPPER(AES_DECRYPT()) ne fonctionne pas non plus ...

PS2 : LOWER( REPEAT(AES_DECRYPT(),5) ) ne fonctionne pas non plus ...

PS3 : Même LOWER(CONCAT(AES_DECRYPT(PatientNom, '$sCleCrypt'),' o_O')) AS PatientNom me retourne : "TesT o_O" .

PS4 : tant qu'on y est : REVERSE(LOWER(CONCAT(AES_DECRYPT(PatientNom, '$sCleCrypt'),' o_O'))) AS PatientNom retourne : O_o TseT
Modifié par Su4p (29 Feb 2012 - 16:45)
Salut

Première remarque, tes parenthèses ne sont pas bien mise en place, car LOWER(AES_DECRYPT(nom),clef) doit normalement s'écrire comme ça: LOWER(AES_DECRYPT(nom,clef)) avec nom et clef de types String
Oui merci pour la réponse ....
Mais à aucun moment j'ai écris LOWER(AES_DECRYPT(nom),clef).
Je précise que le type du champs patientNom est BLOB.
Salut

Pour l'écriture, LOWER(AES_DECRYPT(nom),clef), Il est écris sur le titre de ton sujet Smiley smile
Toute fois pour le cas que tu viens de m'explique ici, j'ai bien pu le reproduire chez moi, j'ai un champ de type blob dont lequel j'ai inséré une valeur avec AES_ENCRYPT('val','clef') et je l'ai récupéré avec AES_DECRYPT(nom,clef) et aussi LOWER(AES_DECRYPT(nom,clef)) sans aucun problème.

Toute fois j'ai bien une ambiguïté qui me casse la tête, pour quoi une commande LOWER avec un champ de type BLOB ??!! pour toi je ne sais pas mais pour moi ça n'a pas vraiment de sens Smiley smile
Modifié par unami (01 Mar 2012 - 16:22)
Ha oui en effet pour le titre c'est corrigé.
Merci beaucoup pour ton test et ton investissement, ton encodage de base et de table est bien utf8_general_ci ?

La raison du champ BLOB vient de la doc MySQL je cite :

"Si vous voulez stocker le résultat d'un chiffrement qui peut contenir des valeur arbitraires, vous devez utiliser une colonne BLOB plutôt que CHAR ou VARCHAR, afin d'éviter les problèmes potentiels de suppression d'espaces terminaux, qui corrompraient les valeurs. "

L'idée du LOWER sur ce champ vient du fait que ce sont des noms et prénoms qui sont cryptés, l'objectif étant de faire une requête de recherche insensible à la casse.

De toute façon la base est existante, je reprends un projet.
Modifié par Su4p (01 Mar 2012 - 17:07)
Re

Oui pour mon codage, je travaille toujours avec utf8_general_ci Smiley smile .
Toute fois pour le Blob je comprends son utilisation avec la commande AES_ENCRYPT, mais ce qui m'est incompréhensible c'est le Lower avec le résultat issu de ta commande appliquée sur un champ Blob.

Blob c'est pour enregistrer exactement ce que tu as insérer comme valeur sous forme binaire, et si nous avons prévu de faire une comparaison sur ce champ, il va falloir que ta valeur de test soit exacte, par conséquent je ne vois pas ce que pourrait faire le lower dans ce cas.

Toute fois je suis sûr qu'il y aura une autre façon plus simple pour faire ce que tu veux sans passer par là Smiley smile