Impossible de déchiffrer les données cryptées dans MySQL
Dans MySQL, la fonction AES_ENCRYPT() est utilisée pour crypter les données, tandis que AES_DECRYPT() est utilisé pour décrypter les données cryptées. Cependant, lors de l'interrogation de données chiffrées, les utilisateurs peuvent rencontrer un problème où les données déchiffrées ne sont pas visibles.
Pour résoudre ce problème, il est important de comprendre que AES_ENCRYPT() renvoie une chaîne binaire, tandis que AES_DECRYPT() renvoie la chaîne binaire. chaîne originale. Par conséquent, lors de la sélection de données chiffrées, le résultat déchiffré doit être explicitement reconverti en chaîne de caractères.
Par exemple, considérons le tableau suivant :
CREATE TABLE `user` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `first_name` VARBINARY(100) NULL, `address` VARBINARY(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;
Les données peuvent être insérées dans le tableau en utilisant la fonction AES_ENCRYPT() :
INSERT INTO user (first_name, address) VALUES (AES_ENCRYPT('Obama', 'usa2010'), AES_ENCRYPT('Obama', 'usa2010'));
Cependant, lors de l'interrogation des données cryptées, la requête suivante n'affichera pas la chaîne d'origine :
SELECT AES_DECRYPT(first_name, 'usa2010'), AES_DECRYPT(address, 'usa2010') FROM user;
Au lieu de cela, le résultat déchiffré sera une chaîne binaire qui n'est pas visible. Pour résoudre ce problème, la requête peut être modifiée pour reconvertir les données déchiffrées en chaîne de caractères :
SELECT *, CAST(AES_DECRYPT(first_name, 'usa2010') AS CHAR(50)) first_name_decrypt FROM user
La colonne first_name_decrypt contiendra désormais la chaîne d'origine, permettant aux utilisateurs d'afficher leurs données comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!