0

「aabbccdd」のような文字列で PHP 関数 md5() (および sha1() も) を使用すると、完全に機能します。ただし、「a-b+ccdd」で同じ関数を使用しても、一貫した結果が得られないようです。

最初の質問: 入力文字列は厳密に英数字、つまり [AZ][az][0..9] にする必要がありますか?

2 番目の質問: 次のように 2 つの異なる php ファイルを使用すると、まったく異なる結果が得られるのはなぜですか。

ファイル 1:

<?php
  $pwd = $_GET['pwd'];
  echo sha1($pwd); 
?>

およびファイル 2 (先頭のみ):

<?php session_start(); 

  $username = $_POST["username"];
  $pass = $_POST["password"];
  $password = sha1($pass); 

  echo "<br>pwd = " . $pass . "<br>PWD(SHA1) = " . $password . "<br>";

誰かが何がうまくいかないのか見ていますか?

4

1 に答える 1

4

MD5 は、あなたの好きな入力を喜んで受け入れます。

あなたは別の問題にぶつかっています.URL経由で送信されると、一部の文字がエンコードされるため、たとえば「+」がスペース(「」)などを表すものとして解釈されます.

つまり、あなたは を送信a-b+ccしますが、受信側の PHP スクリプトは を「見る」a-b ccため、 からの出力はmd5()期待したものとは異なります。

にフィードする前に、文字列を前にエンコードするか、間違ってエンコードされた可能性があることを考慮して後でデコードする必要がありますmd5()。この 2 番目のオプションは、はるかに厄介です (" " が表示され、それがスペースなのかプラス記号なのかわかりません!)。そのため、他に方法がまったくない場合を除き、送信する前に文字列を適切にエンコードしてみてください。例を参照してください: JavaScript で URL をエンコードしますか?

于 2013-01-22T14:19:27.673 に答える