ホームページ >データベース >mysql チュートリアル >MySQL で暗号化されたデータを復号できないのはなぜですか?

MySQL で暗号化されたデータを復号できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-19 03:20:02736ブラウズ

Why Can't I Decrypt Encrypted Data in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。