• ベストアンサー

ハッシュ化するとDBに登録できない

認証に使用するパスワードをmd5で暗号化してDBへ登録する処理をしています。 その際、暗号化後の文字列に”\r”という文字が入り、DBに登録できないという事象が発生しています。 そう多く発生している訳ではないようなのですが…。 そんなケースに当たった方、いらっしゃいますでしょうか? その場合、どうやってそれを回避されましたか? perlは5.8.5、PostgreSQLは7.4.13です。

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.3

>postgreSQLでのバイナリ型というとbyteaでしょうか。  そうです。 >既に登録されているデータがある前提でいくと、どの方法がよいのでしょうか。  どのみち「テーブルを作り直して全て登録しなおし」「既存データへパッチを当てる」のうちどちらかの方法を取ることにはなります。  それを考えたとき、手間が少ないのは後者の方法でしょう。  既存のデータを取り出し、変換して登録しなおすだけのためのプログラムを用意する方法です。  ちなみに、Base64 エンコードを使う方法はややメジャーな類の対策法ですが、既存の変換ロジックが使えなければ手間が増大する欠点があります。  もしすでにエンコードロジックが手元にあるなら、この方法を用いるのが簡単でよいでしょう。フリーの変換モジュールを使う手もあります。  でもそれが使えないならば、変換・復元ロジックは自分で作ることになります。そうなったときは、2バイト1組の16進文字列に変換してしまう方法が、単純でよいと思います。

northwind3
質問者

お礼

返信が遅れてすみません。 ご回答、ありがとうございました!

その他の回答 (2)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。概ね#1と同様ですが、バイナリに関してはもう1手段あるので。 ・Base64エンコードを行う バイナリが簡単に文字列になるので、割合に重宝します。 ただ。MD5でのハッシュ化は…あまりお勧めしません。せめてsha-1をお使いになられることを強くお勧めいたします。

northwind3
質問者

お礼

返信が遅れてすみません。 ご回答、ありがとうございました!

noname#25358
noname#25358
回答No.1

 MD5は、エンコードするとバイナリ文字列を生成します。  通常は下記のうちいずれかの方策を採ります。 1.データベースの項目をバイナリ型にする 2.MD5をさらに、0~9とA-Fだけの16進数文字列に変換する  もう少しだけならもっと詳しい話もできます。  分からない点があれば補足に書いてください。

northwind3
質問者

補足

ありがとうございます。 お言葉に甘えて補足させてもらいます。 ○postgreSQLでのバイナリ型というとbyteaでしょうか。 ○既に登録されているデータがある前提でいくと、どの方法がよいのでしょうか。

関連するQ&A