| 13.8 Autres fonctions
 13 Fonctions à utiliser dans les clauses SELECT et WHERE
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Fonctions sur les bits
 ->Fonctions de chiffrements
 . Fonctions d'informations
 . Fonctions diverses
 
 
 | 
  13.8.2 Fonctions de chiffrements   
 
Les fonctions de cette section chiffrent et déchiffrent des valeurs.
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.
 
AES_ENCRYPT(str,key_str)
      
      
AES_DECRYPT(crypt_str,key_str)
  
Ces fonctions permettent le chiffrement/déchiffrement de données 
utilisant l'algorithme AES ( 
Advanced Encryption Standard
 ), anciennement 
connu sous le nom de Rijndael. Une clé de 128 bits est utilisé 
pour le chiffrement, mais vous pouvez l'étendre à 256 bits en
modifiant les sources. Nous avons choisi 128 bits parce que c'est plus rapide et 
suffisamment sécurisé.
 
Les arguments peuvent être de n'importe quelle taille. Si l'un des arguments est  
NULL
 ,
le résultat de cette fonction sera  
NULL
 .
Vu que AES est un algorithme de niveau bloc, le capitonnage est utilisé 
pour chiffrer des chaînes de longueur inégales et donc, la longueur 
de la chaîne résultante peut être calculée comme ceci :
 
16*(trunc(string_length/16)+1)
 . 
Si la fonction  
AES_DECRYPT()
  détecte des données invalides ou un capitonnage incorrect, 
elle retournera  
NULL
 . Il est également possible que la fonction  
AES_DECRYPT()
  retourne
une valeur différente de  
NULL
  (valeur incohérente) si l'entrée de données ou la clé est invalide.
Vous pouvez utiliser les fonctions AES pour stocker des données sous une forme chiffrée en modifiant 
vos requêtes: Vous pouvez obtenir encore plus de sécurité en évitant de transférer la clé pour chaque requête,
en la stockant dans une variable sur le serveur au moment de la connexion :| 
INSERT INTO t VALUES (1,AES_ENCRYPT("text","password"));
 | 
 Les fonctions  
AES_ENCRYPT()
  et  
AES_DECRYPT()
  ont été ajoutées dans la version 4.0.2 de MySQL
et peuvent être considérées comme étant les fonctions de cryptographie les plus sûres disponibles actuellement
dans MySQL.| 
SELECT @password:="my password";INSERT INTO t VALUES (1,AES_ENCRYPT("text",@password));
 | 
 
DECODE(crypt_str,pass_str)
 
Déchiffre la chaîne chiffrée  
crypt_str
  en utilisant la clé  
pass_str
 .
 
crypt_str
  doit être une chaîne qui a été renvoyée par la fonction  
ENCODE()
 .
      
ENCODE(str,pass_str)
 
Chiffre la chaîne  
str
  en utilisant la clé  
pass_str
 .
Pour déchiffrer le résultat, utilisez la fonction  
DECODE()
 .
 
Le résultat est une chaîne binaire de la même longueur que  
string
 .
Si vous voulez sauvegarder le résultat dans une colonne, utilisez une colonne de type  
BLOB
 .
 
DES_DECRYPT(crypt_str[,key_str])
 
Déchiffre une chaîne chiffrée à l'aide de la fonction  
DES_ENCRYPT()
 .
 
Notez que cette fonction fonctionne uniquement si vous avez configuré MySQL
avec le support SSL.  Utilisation des connexions sécurisées .
Si l'argument  
key_string
  n'est pas donné, la fonction  
DES_DECRYPT()
 
examine le premier bit de la chaîne chiffrée pour déterminer le numéro de clé DES
utilisé pour chiffrer la chaîne originale, alors la clé est lu dans le fichier  
des-key-file
 
pour déchiffrer le message. Pour pouvoir utiliser cela, l'utilisateur doit avoir 
le privilège  
SUPER
 . 
Si vous passé l'argument  
key_string
  à cette fonction, cette chaîne est utilisée
comme clé pour déchiffrer le message.
Si la chaîne  
string_to_decrypt
  ne semble pas être une chaîne chiffrée, MySQL
retournera la chaîne  
string_to_decrypt
 . 
Si une erreur survient, cette fonction retourne  
NULL
 .
 
DES_ENCRYPT(str[,(key_num|key_str)])
 
Chiffre la chaîne avec la clé donnée en utilisant l'algorithme DES.
Notez que cette fonction fonctionne uniquement si vous avez configuré MySQL avec 
le support SSL.  Utilisation des connexions sécurisées . 
La clé de hachage utilisée est choisie en suivant les recommandations suivantes :
 
| Argument | Description |  
| Un seul argument | La première clé de 
des-key-file
 est utilisée. |  
| Un numéro de clé | Le numéro de la clé donnée (0-9) de 
des-key-file
 est utilisée. |  
| Une chaîne | La chaîne donnée 
key_string
 doit être utilisé pour chiffrer 
string_to_encrypt
. |  
La chaîne retournée doit être une chaîne binaire où le premier caractère doit 
être  
CHAR(128 | key_number)
 .
Le nombre 128 a été ajouté pour reconnaître facilement une clé de hachage.
Si vous utilisez une chaîne comme clé,  
key_number
  doit être 127. 
Si une erreur survient, la fonction retournera  
NULL
 .
La longueur de la chaîne de résultat doit être :  
new_length= org_length + (8-(org_length % 8))+1
 . 
des-key-file
  a le format suivant :
 Chaque  
key_number
  doit être un nombre dans l'intervalle 0 à 9.
Les lignes dans le fichier peuvent être dans n'importe quel ordre.
 
des_key_string
  est la chaîne qui permettra le chiffrage du message.
Entre le nombre et la clé, il doit y avoir au moins un espace. La première clé est 
la clé par défaut qui sera utilisé si vous ne spécifiez pas d'autres clés en arguments 
de la fonction  
DES_ENCRYPT()
 .| 
key_number des_key_stringkey_number des_key_string
 | 
 
Vous pouvez demander à MySQL de lire de nouvelles valeurs de clé dans le fichier de clés
avec la commande  
FLUSH DES_KEY_FILE
 . Cela requière le privilège  
Reload_priv
 .
Un des bénéfices d'avoir une liste de clés par défaut est que cela donne
aux applications la possibilité de regarder l'existence de la valeur chiffrée de la colonne,
sans pour autant donner la possibilité à l'utilisateur final de déchiffrer ces valeurs. | 
mysql> SELECT customer_address FROM customer_table WHEREcrypted_credit_card = DES_ENCRYPT("credit_card_number");
 | 
 
ENCRYPT(str[,salt])
 
Chiffre la chaîne  
str
  en utilisant la fonction  
crypt()
 .
L'argument  
salt
  doit être une chaîne de deux caractères.
(A partir de la version 3.22.16, l'argument  
salt
  peut être plus 
long que deux caractères.) : 
Si la fonction  
crypt()
  n'est pas disponible sur votre système, la fonction  
ENCRYPT()
 
retournera toujours  
NULL
 .La fonction  
ENCRYPT()
  conserve uniquement les 8 premiers caractères de la chaîne  
str
 ,
au moins, sur certains système. Le comportement exact est directement déterminé par la fonction 
système  
crypt()
  sous-jacente.| 
mysql> SELECT ENCRYPT("hello");-> 'VxuFAJXVARROc'
 | 
 
MD5(str)
 
Calcul la somme de vérification MD5 de la chaîne  
string
 .
La valeur retournée est un entier hexadécimal de 32 caractères qui peut être
utilisé, par exemple, comme clé de hachage : 
C'est l'algorithme RSA (" 
RSA Data Security, Inc. MD5 Message-Digest Algorithm
 ").| 
mysql> SELECT MD5("testing");-> 'ae2b1fca515949e5d54fb22b8ed95575'
 | 
 
OLD_PASSWORD(str)
 
OLD_PASSWORD()
  est disponible depuis MySQL 4.1, lorsque l'implémentation
de la fonction  
PASSWORD()
  a été modifiée pour améliorer la sécurité.
 
OLD_PASSWORD()
  retourne la valeur pre-4.1 de  
PASSWORD()
 .
 Chiffrement des mots de passe en MySQL 4.1 .
      
PASSWORD(str)
 
Calcule un mot de passe chiffré à partir de la chaîne  
str
 .
C'est cette fonction qui est utilisé pour chiffrer les mots de passes 
MySQL pour être stockés dans une colonne de type  
Password
  
de la table  
user
  : 
Le chiffrage par  
PASSWORD()
  n'est pas réversible.| 
mysql> SELECT PASSWORD('badpwd');-> '7f84554057dd964b'
 | 
 
PASSWORD()
  n'est pas un chiffrage comparable à la fonction de chiffrage Unix.
Voir  
ENCRYPT()
 .
Note :
 
La fonction  
PASSWORD()
  est utilisée durant l'identification au serveur
MYSQL. Il est recommandé de  
ne pas l'utiliser
  pour vos applications.
Utilisez plutôt  
MD5()
  ou  
SHA1()
 .
Voyez aussi  
RFC-2195
  pour plus d'informations sur comment gérer les
mots de passe et l'identification de votre système. 
SHA1(str)
      
      
SHA(str)
  
Calcule la somme de vérification SHA1 160 bits de la chaîne  
string
 , comme 
décrit dans la RFC 3174 ( 
Secure Hash Algorithm
 ). La valeur retournée est un entier
hexadécimal de 40 caractères, ou bien  
NULL
  dans le cas où l'argument vaut  
NULL
 .
Une des possibilités d'utilisation de cette fonction est le hachage de clé.
Vous pouvez aussi l'utilisé comme fonction de cryptographie sûre pour stocker les mots de passe. 
La fonction  
SHA1()
  a été ajoutée dans la version 4.0.2 de MySQL et peut être considérée 
comme une méthode de cryptographie plus sûre que la fonction  
MD5()
 .
La fonction  
SHA()
  est un alias de la fonction  
SHA1()
 .| 
mysql> SELECT SHA1("abc");-> 'a9993e364706816aba3e25717850c26c9cd0d89d'
 | 
 |