web-dev-qa-db-ja.com

mysqlで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;

1行挿入しました:

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

22
PSR

マニュアルによると:

AES_ENCRYPT()は文字列を暗号化し、バイナリ文字列を返します。 AES_DECRYPT()は暗号化された文字列を復号化し、元の文字列を返します

なぜあなたのケースでバイナリ文字列を返しているのか分かりません。とにかく、これを試してください:

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

そして、first_name_decrypt の代わりに first_name

34
John Woo

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を使用する必要があり、そうでない場合は結果が間違っていることに気付きました。

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