Для того чтобы исправить «???» на реальном тексте, вам может потребоваться изменить настройки терминала, чтобы они принимали utf-8 (эта процедура зависит от vim, emacs и putty). Это покажет значения, например, так:
select AES_ENCRYPT('testar encrypt texten', 'mypasskey2018');
+-------------------------------------------------------+
| AES_ENCRYPT('testar encrypt texten', 'mypasskey2018') |
+-------------------------------------------------------+
| ▒Xv^▒y▒▒▒▒v▒G▒▒▒▒:▒'▒▒Η▒РG' |
+-------------------------------------------------------+
Но чтобы выбрать читаемое значение VARBINARY
в MySQL, не забудьте использовать HEX()
. Например:
select HEX(AES_ENCRYPT('testar encrypt texten', 'mypasskey2018'));
+------------------------------------------------------------------+
| HEX(AES_ENCRYPT('testar encrypt texten', 'mypasskey2018')) |
+------------------------------------------------------------------+
| 05D758765EA5798296E3B5D876A24788A3F606A03A95278CFFCE97ADD0A04727 |
+------------------------------------------------------------------+
В зависимости от того, что вы делаете, вам может вообще не понадобиться HEX()
, но по крайней мере с этим вы сможете увидеть точные данные, которые на самом деле хранятся там в шестнадцатеричном формате.
Если вы не уверены, работает ли он, проверьте выбор для расшифровки зашифрованного значения. Мне кажется, это работает:
select AES_DECRYPT(AES_ENCRYPT('testar encrypt texten', 'mypasskey2018'), 'mypasskey2018');
+-------------------------------------------------------------------------------------+
| AES_DECRYPT(AES_ENCRYPT('testar encrypt texten', 'mypasskey2018'), 'mypasskey2018') |
+-------------------------------------------------------------------------------------+
| testar encrypt texten |
+-------------------------------------------------------------------------------------+
Если вас беспокоит необходимость чтения и сравнения шестнадцатеричных значений или если вы хотите преобразовать конфиденциальные данные в читаемый формат, есть некоторые уловки, которые мы сможет сделать. Например, для выбора учетной записи пользователя по паролю вы должны сделать ...
SELECT * FROM User WHERE User.Password = PASSWORD($user_input);
В этом смысле, если пароль «крутой», мне не нужно беспокоиться ни об этом, ни о чем хэши или шифрует. Я могу просто выбрать с помощью этих средств.