ホームページ >データベース >mysql チュートリアル >MySQL で暗号化されたデータを復号できないのはなぜですか?
MySQL で暗号化されたデータを復号化できません
MySQL では、AES_ENCRYPT() 関数を使用してデータを暗号化しますが、AES_DECRYPT() 関数は暗号化されたデータを復号化するために使用されます。ただし、暗号化されたデータをクエリすると、復号化されたデータが表示されないという問題が発生する可能性があります。
この問題を解決するには、AES_ENCRYPT() がバイナリ文字列を返すのに対し、AES_DECRYPT() はバイナリ文字列を返すことを理解することが重要です。オリジナルの文字列。したがって、暗号化されたデータを選択するときは、復号化された結果を文字列に明示的にキャスト バックする必要があります。
たとえば、次のテーブルについて考えてみましょう。
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;
データはテーブルに挿入できます。 AES_ENCRYPT() 関数を使用する:
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;
代わりに、復号化された結果は表示されないバイナリ文字列になります。この問題を解決するには、クエリを変更して、復号化されたデータを文字列にキャストして戻すことができます。
SELECT *, CAST(AES_DECRYPT(first_name, 'usa2010') AS CHAR(50)) first_name_decrypt FROM user
first_name_decrypt 列には元の文字列が含まれるようになり、ユーザーは期待どおりにデータを表示できるようになります。
以上がMySQL で暗号化されたデータを復号できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。