Fonctions sur les bits
<<<
Fonctions de chiffrements Fonctions d'informations
>>>

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() .

<< Fonctions de chiffrements >>
Fonctions sur les bits Autres fonctions Fonctions d'informations