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(string,key_string)
-
-
AES_DECRYPT(string,key_string)
-
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
patchant la source. Nous avons choisi 128 bits parce que c'est plus rapide et assez 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:
INSERT INTO t VALUES (1,AES_ENCRYPT("text","password"));
|
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 :
SELECT @password:="my password"; 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.
-
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(string_to_decrypt [, key_string])
-
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(string_to_encrypt [, (key_number | key_string) ] )
-
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 :
key_number des_key_string key_number des_key_string
|
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 permettera 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()
.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 WHERE crypted_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.) :
mysql> SELECT ENCRYPT("hello"); -> 'VxuFAJXVARROc'
|
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.
-
MD5(string)
-
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 :
mysql> SELECT MD5("testing"); -> 'ae2b1fca515949e5d54fb22b8ed95575'
|
C'est l'algorithme RSA ("RSA Data Security, Inc. MD5 Message-Digest Algorithm").
-
PASSWORD(str)
-
-
OLD_PASSWORD(str)
-
Calcule un mot de passe chiffré à partir de la chaîne
str
. C'est cette fonction
qui est utilisé pour crypter les mots de passes MySQL pour être stockés dans une colonne
de type
Password
de la table
user
:
mysql> SELECT PASSWORD('badpwd'); -> '7f84554057dd964b'
|
Le chiffrage par
PASSWORD()
n'est pas réversible.
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(string)
-
-
SHA(string)
-
Calcule la somme de vérification SHA1 160 bit 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.
mysql> SELECT SHA1("abc"); -> 'a9993e364706816aba3e25717850c26c9cd0d89d'
|
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()
.
|