J'ai créé la table utilisateur
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;
J'ai inséré une rangée:
INSERT into user (first_name, address) VALUES (AES_ENCRYPT('Obama', 'usa2010'),AES_ENCRYPT('Obama', 'usa2010'));
Pour sélectionner cette ligne, j'ai utilisé:
SELECT AES_DECRYPT(first_name, 'usa2010'), AES_DECRYPT(address, 'usa2010') from user;
Je reçois le résultat suivant. Ce que je dois faire voir mes données. Aucune donnée n'est visible pour moi.
Selon le manuel:
AES_ENCRYPT () chiffre une chaîne et renvoie une chaîne binaire. AES_DECRYPT () décrypte la chaîne chiffrée et retourne la chaîne d'origine.
Je ne sais pas pourquoi il renvoie toujours une chaîne binaire dans votre cas. Quoi qu'il en soit, essayez ceci:
SELECT *,
CAST(AES_DECRYPT(first_name, 'usa2010') AS CHAR(50)) first_name_decrypt
FROM user
Et utilisez first_name_decrypt
au lieu de first_name
.
Depuis le client en ligne de commande mysql, il n’est pas nécessaire d’utiliser CAST:
mysql> SELECT AES_DECRYPT(AES_ENCRYPT('admin','abc'),'abc');
+-----------------------------------------------+
| AES_DECRYPT(AES_ENCRYPT('admin','abc'),'abc') |
+-----------------------------------------------+
| admin |
+-----------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CAST(AES_DECRYPT(AES_ENCRYPT('admin','abc'),'abc') AS CHAR (50));
+------------------------------------------------------------------+
| CAST(AES_DECRYPT(AES_ENCRYPT('admin','abc'),'abc') AS CHAR (50)) |
+------------------------------------------------------------------+
| admin |
+------------------------------------------------------------------+
1 row in set (0.02 sec)
Comme vous pouvez le constater, la conversion en ligne de commande est un peu plus lente. Mais j'ai remarqué que si vous utilisez des outils tels que phpmyadmin, vous devez utiliser CAST, sinon le résultat sera faux.
if (isset($_POST['user_name']) and isset($_POST['user_password'])){
$user_name = $_POST['user_name'];
$user_password = $_POST['user_password'];
$query = "SELECT * FROM `user_tbl` WHERE user_name='$user_name' and AES_DECRYPT(user_password , '@ert') = '$user_password'";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
$count = mysqli_num_rows($result);