質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Q&A

解決済

2回答

4945閲覧

php HEX AES 暗号化について

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

0グッド

1クリップ

投稿2015/04/21 15:32

編集2015/04/21 15:34

個人情報等をデータベースに保存する際に、
暗号化 → HEX(aes_encrypt('$id','key')
復号化 → AES_DECRYPT(UNHEX(id),'key')
を利用しているのですが、
'key'の部分をデータ毎に違うものにしたいと考えています

単純に AES_DECRYPT(UNHEX(id),$key) とした場合
エラーになってしまいました。

これを実現するに何かいいヒントを頂けないでしょうか?

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

暗号化 → HEX(aes_encrypt('$id','key')
復号化 → AES_DECRYPT(UNHEX(id),'key')

暗号化の方でシングルクォーテーションで$idを囲んでいるように復号化のほうも

lang

1AES_DECRYPT(UNHEX(id), '$key')

としたらいいんじゃないでしょうか?

投稿2015/04/22 01:34

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/04/22 02:42

ご回答ありがとうございま! あっさり解決しました..^^;;; 気が付かなくてお恥ずかしい限りです。 ちなみに、’key’を同じデータベースに保存した場合は (他のテーブルに’Key’を置いた場合、結合処理が必要ですが) AES_DECRYPT(UNHEX(id), `key(カラム名)`)でも大丈夫でした。
guest

0

ん? aes_encryptってPHPの標準ライブラリにあります? 非標準ライブラリじゃないですか?
MySQLでの話かな...

まあ、何にしても、AESで暗号化したものを複合化するためには、暗号化したときの鍵を使って複合化する必要があります。それをデータ毎(RDBMSでいう行毎)に鍵を変えたいなら...こんな感じでしょうか。

以下のテーブル定義があるとします。

  1. id 主キー
  2. data 暗号化対象の列

で、idを引数にとって鍵を返す何らかの関数make_key(id)があれば、HEX(AES_ENCRYPT(data, make_key(id)))します。(ここでは、make_key(id)はMySQLのユーザ定義関数として定義しているという想定です。)

そして、SELECTするときはAES_DESCRIPT(UNHEX(data), make_key(id))するわけです。

私なら、こんなことはしないで、十分に長い固定の鍵を使いますけどね。

投稿2015/04/21 20:16

chokojori

総合スコア971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/04/22 02:42

ご回答ありがとうございます.. 今後参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問