Подтвердить что ты не робот

Как использовать AES_ENCRYPT и AES_DECRYPT в mysql

Я создал таблицу пользователя

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;

Я вставил одну строку:

INSERT into user (first_name, address) VALUES (AES_ENCRYPT('Obama', 'usa2010'),AES_ENCRYPT('Obama', 'usa2010'));

Чтобы выбрать эту строку, я использовал:

SELECT AES_DECRYPT(first_name, 'usa2010'), AES_DECRYPT(address, 'usa2010') from user;

Я получаю следующий результат. Что мне нужно сделать, чтобы увидеть мои данные. Нет данных для меня.

I am unable to see my data

4b9b3361

Ответ 1

В соответствии с Руководством:

AES_ENCRYPT() шифрует строку и возвращает двоичную строку. AES_DECRYPT() расшифровывает зашифрованную строку и возвращает исходную строку.

Я не знаю, почему он все еще возвращает двоичную строку в вашем случае. В любом случае, попробуйте следующее:

SELECT *, 
       CAST(AES_DECRYPT(first_name, 'usa2010') AS CHAR(50)) first_name_decrypt 
FROM   user

И используйте first_name_decrypt вместо first_name.

Ответ 2

Из клиента командной строки mysql нет необходимости использовать 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)

Как видно, использование командной строки в командной строке немного медленнее. Но я заметил, что если вы используете некоторые инструменты, такие как phpmyadmin, тогда вам нужно использовать CAST, иначе результат будет неправильным.