web-dev-qa-db-fra.com

Comment utiliser AES_ENCRYPT et AES_DECRYPT dans mysql

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.

I am unable to see my data

21
PSR

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.

32
John Woo

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.

13
Viktor
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);
0
Dhivya