0

まあ、私はこれに困惑しているので、間違いなく正しいニックネームを選びました:

最初にそれを暗号化し、テーブルに暗号化された行を取得します。しかし、復号化しようとすると、結果セットとしてゼロ行が得られます。

暗号化:

INSERT INTO accesobases (company, username,email) VALUES
 ('hola',
AES_ENCRYPT('pedro','capullo'),
AES_ENCRYPT('myemail',' capullo')
);

復号化クエリを実行すると、0 行が表示されます。

SELECT company,
AES_DECRYPT('username', 'capullo'),
AES_DECRYPT('email', 'capullo')
from acceso
where company = 'hola';

会社を暗号化していないことに注意してください。間違いなく暗号化する必要がありますが、エラーの可能性がある場所を確認したかったのです。つまり、暗号化されていない単語 (company = hola) から逸脱していなくても、結果が得られます。したがって、次のようにしようとするとさらに悪化します。

where AES_DECRYPT ('company', 'capullo') = ' " . $company . " '

これは、私のphpページでどのように見えるかです。上記のブロックは、MySQL データベース自体で実行されていました。

したがって、質問は次の 2 つです。

  1. データを表示しないことの何が問題になっていますか
  2. ..."$company.." のバージョンが機能するかどうか。

しかし、私が言うなら:

SELECT * from acceso 
WHERE company = 'hola';

次に、暗号化された単語を含む行を表示します

したがって、行を表示する前に復号化する時間がなく、何も表示されないかのようです。

4

2 に答える 2

2
SELECT company,
AES_DECRYPT('username', 'capullo'),
AES_DECRYPT('email', 'capullo')
from acceso
where company = 'hola';

列の値ではなく、定数文字列「username」を復号化するように MySQL に指示しているため、これは機能しませんusername'username'との引用符を削除します'email'

where AES_DECRYPT ('company', 'capullo') = ' " . $company . " '

ここで同じ問題。ただし、インデックスを活用するには、これを逆に行う方が効率的です。

where company = AES_ENCRYPT(?, 'capullo')

そうは言っても、MySQL サーバー側で AES_ENCRYPT を使用することは安全ではありません。暗号化キーは各クエリでサーバーに渡され、MySQL プロセスリストに表示されるだけでなく、サーバー クエリ、スロー、および/またはエラー ログにも表示される可能性があります。MySQL 接続に SSL を使用していない場合、暗号化解除されたデータと同様に、それらはクリアテキストでネットワークを介して渡されます。

于 2012-05-25T18:22:59.457 に答える
1

これらは列名であるため、引用符で囲まないでください。

AES_DECRYPT('username', 'capullo'),
AES_DECRYPT('email', 'capullo')

代わりにこれを行います:

AES_DECRYPT(username, 'capullo') AS username,
AES_DECRYPT(email, 'capullo') AS email

また、AES_ENCRYPT の出力はバイナリであるため、列がバイナリであることを確認してください。

また、「accesobases」と「acceso」という 2 つの異なるテーブルがあるように見えるので、正しいテーブルを使用していることを確認してください。

あなたの声明:

where AES_DECRYPT (company, 'capullo') = ' " . $company . " '

ここでも列名から引用符を削除する限り、問題ないようです。インデックスを使用できないため、遅くなります。代わりに、次のようにする必要があります。

where company = AES_ENCRYPT('$company', 'capullo')
于 2012-05-25T18:22:20.487 に答える