人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPにてmcrypt_genericを利用しパスワードを暗号化して格納したいと思っています。

プログラムソースはUTF-8です。

このときに、暗号化後の文字列を正常にデータベースに格納するにはどうすればよいでしょうか?

データベースに格納領域として「VARCHAR」型で確保してインサートすると、正常にインサートされません。
症状としては一部の文字(1文字か2文字程度)しかインサートされません。

画面にechoにて出力した場合はもっと沢山の文字列があるのですが、なぜDBには格納できないのでしょうか?

データベース側の型指定があやまっているのでしょうか?

前提として、普通の文字列や数値データ等は
文字化けなくMySQLに対して読み書きできております。

●質問者: curd
●カテゴリ:インターネット ウェブ制作
✍キーワード:dB echo MySQL PHP UTF-8
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● KUROX
●30ポイント

http://phpspot.net/php/man/php/function.mcrypt-generic.html

参考になるでしょうか?

確認済みなら申し訳ありません。

DBの型とデータの中身のあたりに問題があると推測します。

本当に、ここのページを読んだ感触と質問に書いている

結果をみての推測です。

◎質問者からの返答

VARCHAR型で最後の空白を削除し試しましたが、

やはりだめでした。

DBインサート前であれば暗号化、復号化ともに問題ないので、インサートの問題だとは思うのですが、もう少し読んでみます。

ご回答ありがとうございました。


2 ● xxxatsxxx
●15ポイント

マニュアルに

MySQL データベースにデータを格納する場合は、 varchar フィールドに値を挿入する際に末尾のスペースが取り除かれることを 覚えておきましょう。暗号化されたデータの最後にスペース(ASCII 32)が 含まれていた場合、この処理によってデータが破壊されてしまいます。 かわりに tinyblob/tinytext (あるいはより大きな) フィールドを 使用してください。

とあるので、とりあえず、tinytextかtextを利用してみた方がいいのだと思います。

http://manual.xwd.jp/function.mcrypt-generic.html

◎質問者からの返答

TINYTEXT及びTEXTで試しましたがだめでした。

もう少しいろいろ試してみます。

ご回答ありがとうございました。


3 ● xxxatsxxx
●15ポイント

試しに、mysql_connectしてmysql_queryでインサートして、取り出してみましたが、問題ありませんでした。

もしかして、PEAR::DBなどのラッパーを利用されていますでしょうか?クオートなどで余計な事をされているかもしれませんので、

ご利用のライブラリ等明記してもらえるとありがたいです。

ちなみに前にDB_DataObjectでmcrypt_generic使った気がしますが、問題なかったはずです。

http://manual.xwd.jp/function.mcrypt-generic.html

◎質問者からの返答

mysql_connectしてmysql_queryしております。

何かしら根本的に間違っているのですかね(汗


4 ● KUROX
●30ポイント

・DBは、UTF-8、SJIS、EUC-JPのどれでしょう。

・別のツールとかで該当文字列がINSERTできるかはどうでしょう

・INSERTする前のデータを、16進で表示して、文字列と

してみた場合、不自然なものはないでしょうか?

http://q.hatena.ne.jp/answer

◎質問者からの返答

原因が徐々にわかってきました。

そもそも、DB云々の前に暗号化・復号化の関数を作成した際に、初期化を毎回していたのですが、

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_RAND);

上記を暗号化及び復号化の際にそれぞれ呼び出している為、復号化に失敗しているのがまずは問題だとわかりました。

※つまり、DBに格納できるのか、できないのかという問題は解決していないのですが、そもそも復号化に失敗しているのは、別な要因だったということがわかりました。

通常暗号化の際の初期化ベクトルIVはDBや設定ファイルに保存しておいて共通のものを使うべきなのでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ