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:
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.
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()
.
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. See Section 5.6.7, « 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. See Section 5.6.7, « 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
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()
.
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");
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.
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
").
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()
.
Section 5.5.9, « Hashage de mots de passe en MySQL 4.1 ».
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
:
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.
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.
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()
.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.