0

PHPcrypt関数は、ローカル サーバーと運用サーバーで異なるハッシュを返します。ローカルホストでは暗号化ハッシュの検証は正常に機能していますが、本番環境では機能していません。

Local: PHP 5.4.4
Procution: PHP 5.3.10-1ubuntu3.5 

コード:

echo crypt('123123123');

ローカルの応答例:

$1$7ymnm8q/$M6HLj2JEvzWGElqlwjAKm0

生産例の応答:

$6$sbttg2v6$2YAU3dNKR/.MRGmbBV4sR8vEhr/L8aOMTej1u3gArhgIiCiJ5IFJ
4

2 に答える 2

1

PHPドキュメントcrypt()からの引用:

crypt() は、標準の Unix DES ベースのアルゴリズムまたはシステムで利用可能な代替アルゴリズムを使用して、ハッシュされた文字列を返します。

したがってcyrpt() 、特定のアルゴリズムに拘束されるのではなく、システムがサポートするものを使用します。

実行しているシステムでサポートされている次の定数を使用して確認できますcrypt()

  • CRYPT_STD_DES
  • CRYPT_EXT_DES
  • CRYPT_MD5
  • CRYPT_BLOWFISH
  • CRYPT_SHA256
  • CRYPT_SHA512

ドキュメントの例を見ると、ローカル コードでは暗号化に MD5 が使用されているのに対し、運用サーバーでは SHA-512 が使用されていることがわかります。

さらに、特定のソルトを指定しないため、PHP がソルトを生成しますが、これも の呼び出しごとに異なりますcrypt()

于 2013-02-24T09:22:22.450 に答える
0

システムは異なるデフォルトのハッシュ アルゴリズムを使用$1$します。MD5 を表し、$6$SHA-512 を表します。

saltパラメータを使用してアルゴリズムを明示的に指定する必要があります。

crypt('123123123', '$6$somerandomstring');

crypt()ドキュメントを参照してください:

saltハッシングのベースとなるオプションのソルト文字列。指定しない場合、動作はアルゴリズムの実装によって定義され、予期しない結果につながる可能性があります。

于 2013-02-24T09:24:53.350 に答える