• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MD5の値が異なる)

MD5の値が異なる

このQ&Aのポイント
  • MD5によって生成された値が予想と異なる理由について質問です。
  • test.cgiとtest2.cgiでMD5の値が一致しない問題について相談です。
  • エンコードなどの問題によって、test.cgiとtest2.cgiで生成されるMD5の値が異なることについて質問です。

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

  • ベストアンサー
  • nipotan
  • ベストアンサー率59% (134/227)
回答No.1

一応、手元で確認してみました --- use strict; use CGI; use Digest::MD5 'md5_base64'; { my $query_form = CGI->new('name=hogehoge&tel=031234xxxx&digest64=NSKBL6fmS/msCw6e/KXm3w'); my $name = $query_form->param('name'); my $tel = $query_form->param('tel'); my $digest64_before = $query_form->param('digest64'); my $digest64_after = md5_base64($name, $tel); print 'Content-Type: text/plain'."\n\n"; print $digest64_before."\n"; print $digest64_after."\n"; } --- まずローカル (ターミナルや DOS 窓) で実行してみてください。 同じ結果は得られると思います。 原因はなんだろうな?と考えたんですが、そもそも、それを実行するサーバはなんでしょうか? CGI としての動作がおかしいのでは?と思うんです。 環境がわからないと何ともいえませんが、恐らく一部の httpd において、/ (スラッシュ) が入る QUERY_STRING を PATH_INFO として扱うために、QUERY_STRING がフラッシュされてしまっているのかも知れません。 とりあえず、test.cgi 側で、以下の関数を追加してください。 --- sub urlescape{ my $str = shift; $str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg; $str =~ tr/ /+/; $str; } --- そして、 > $param="name=".$name."&tel=".$tel."&digest64=".$digest64; としている箇所を $param = urlescape("name=".$name."&tel=".$tel."&digest64=".$digest64); として実行してみたらいかがでしょうか。 そもそも > をtest2.cgiのパラメタとしてtest2.cgiへ としている箇所も、どうやってパラメタとしているのかが気になるところではありますが。(「$digest64_beforeにはnullが」ってので、少し気になります。)

関連するQ&A