アプリ版:「スタンプのみでお礼する」機能のリリースについて

■内容(全体の流れ)
(1)メールアドレス等入力
(2)自動返信メールにて登録完了の通知
(3)パスワード申請URLにてパスワードを申請
(4)自動返信メールにて、パスワードを送付。
(5)ログイン画面で、ログインする。
(6)ログイン後は、会員専用のPDF文書がダウンロードできる。

この中の(5)で、正しいパスワードを入力しても「パスワードが間違っています」というエラー表示がでるようになりました。


■問題解決に必要と思われる情報

1.パスワード生成は、<stdio.pl> CGI Standard Input Output Library Ver 3.36

2.不可逆のパスワード生成cryptを使っている?
  print FILE "$Form{'mail'}:" . stdio'CryptString($passwd) . ":" . time . ":" . time . "\n";

3.レンタルサーバを変更したら問題が発生した。またパスワード記録ファイルの文字数が変わった。

問題なし:ギガバイズ http://saya.g--z.com/
xxxxxx@**.com:l/nloYYiaSdi6:986364127:986364127

問題あり:CPI http://www.cpi.ad.jp/
xxxxxx@**.com:$1$LN$iBFSFm4u1KoaMoXXUB5xh.:1109749957:1109749957

※xxxxxx@**.comは、メールアドレス
※ロリポップレンタルサーバでも問題なく動作した。

5.ユーザーに送られてくるパスワードの文字数は、8文字。
例:d8DHy4iy (3で記載したCPIで生成された、ユーザーへ送られたパスワード)

私の推測では、サーバを変えたことによりパスワードの暗号化の方法が変わり、認証の際に登録時のパスワードと相違が発生しているのではないか、と考えています。
対処法お分かりになる方がいらっしゃいましたら教えてください。
どうぞよろしくお願い致します。

A 回答 (2件)

> サーバを変えたことによりパスワードの暗号化の方法が変わり、・・・



まさにその通りです。
今回の場合、
CPIの方でcryptが吐き出しているのが$1$で始まるMD5ですね。
ギガバイズの方はDESです。

よって、両者が吐き出すcrypt後の文字列が異なるために「パスワードが間違っています」になってしまうのでしょう。

対処法としては、
・どちらか一方に統一
・crypt関数を使わず別の方法を採る
の二つがあります。

前者の方は、サーバーの仕様による違いなのでどうしようもないですが、
DESに統一する場合は、故 小塚 敦さんが作成されたライブラリを使用することができます。
http://mikeneko.creator.club.ne.jp/~lab/perl/des/
これを使った場合は、サーバーの環境を問わずDESで暗号化した形のものを常に取得することができます。
ただし、PurePerlである分、通常のcrypt関数を使うときよりもサーバーへの負担は高いです。
(単発ならいいですが連続使用する場合は注意が必要です)

後者の方法としては、
・各種ハッシュ関数を使ったハッシュにして扱う
・パスワードをそのまま(生のまま)扱う
があります。

ハッシュで使う場合は、お馴染みのMD5、SHA1をはじめとしてSHA256、384、512やRIPEMD160、256・・・等を使うことになります。
ただし、後者の二つは既存の記録ファイルから元のパスワードを導くことができないので、今回の場合は前者の「どちらかに統一」の方法を採ることになるでしょう。
(個人的なお奨めはハッシュを利用したものですが)
    • good
    • 0

問題の原因は推測どおりサーバによる違いです。


参考URL1

stdio'CryptString の中身までみていませんが、
検索してみたところ、cryptがMD5で動作する環境でDES方式の暗号化を行うライブラリ(参考URL2)がありましたので、crypt関数を使っている部分をこのモジュールに差し替えればうまく動きそうな気がします。

参考URL:http://tech.bayashi.net/pdmemo/crypt.html,http:/ …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!