2012-03-02 3 views
0

PHPでSHA1を使用して無制限のハッシュを生成すると、MySQLサーバで処理するときとは異なります。どうしてこれなの?SHA1()を使用する際、私のPHPサーバとMySQLサーバが異なるハッシュを生成する方法はありますか?

ハッシュが同じになるようにこれを修正する方法はありますか?ハッシュがすでに生成されている場合、それは遅すぎると思いますか?

<?php 
$p = 'password'; 

$p2 = SHA1('$p'); 

...INSERT INTO table (pass1, pass2) VALUES (SHA1('$p'), '$p2')... 


?> 

EDIT:

それがパスワードの代わりに "SHA1( '$ pを')" ハッシングされたように見えます。

EDIT2:

そして、私は馬鹿です。私はSHA1に ''を入れました。おっとっと!それがfalseの場合

+0

2つの異なるハッシュを投稿してください。 – Blender

+0

えええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええと私はちょうど新しいパスワードを作りました。私はもう少しこれを調べます。 – Jeremy

+3

入力に多少のばらつきがありますので、それを計算するにはコードを必要とします。そして、たとえ問題が見つかったとしても、すべてのPHPまたはすべてのMySQLハッシュを再計算せずに修正することはありそうにありません。 – Wrikken

答えて

2

このコード:

$p2 = SHA1('$p'); 

が実際にリテラル$pをハッシュだろう、ないコンテンツ$p

$p2 = SHA1($p); 

これは、変数とエスケープシーケンスが単一引用符を使用するときにPHPによって解釈されないためです。これはmanualに記載されている:

注:彼らは、単一引用符で囲まれた文字列で発生したときに引用され、ダブル、ヒアドキュメント構文と異なり、変数と特殊文字のエスケープシーケンスは展開されません。

+0

よろしくお願いします。 – Jeremy

0

PHPのSHA1関数の$のraw_outputフラグが生成されたハッシュがで返される形式に影響を与え、あなたの時間を無駄にするために申し訳ありません。、あなたは文字列として40桁の16進数を取得します関数から外します。 trueに設定されている場合、代わりに生のバイナリの20桁の数字が出力されます。既定値はfalseです。

http://uk.php.net/sha1

0

これは、PHPがSHA1のエンコードに使用する文字セットであるかもしれません。 MySQLがUnicodeを使用していて、PHPがASCIIを使用している場合、異なる結果が出ます。

関連する問題