ホームページ  >  記事  >  バックエンド開発  >  PHP の crypt() 関数と同等の True Go はありますか?

PHP の crypt() 関数と同等の True Go はありますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-29 05:10:31300ブラウズ

Is There a True Go Equivalent to PHP's crypt() Function?

PHP の crypt() 関数と同等の Go を見つける

PHP と Golang の Crypt 関数

問題の概要

PHP crypt() 関数は、指定されたアルゴリズムを使用して、指定された文字列のハッシュ値を生成します。最近、特定の入力とハッシュ値に対して同一の結果を生成する、この関数と同等の Golang を求める質問が生じました。

失敗した試行

を実装するためにいくつかの試みが行われました。 PHP の crypt() 関数と同等の Go:

  • 試行 1: go-crypt モジュールは同じ結果を生成しませんでした。
  • 試行 2 : C の相互運用性を使用したカスタム crypt 関数の定義も失敗しました。
  • 試行 3: bcrypt パッケージは、PHP5.3 以前で使用されている CRYPT_BLOWFISH アルゴリズムをサポートしていませんでした。

解決策

「Go crypt 関数」に相当するものは見つかりませんでしたが、代替案が見つかりました:

  • を使用するgolang.org/x/crypto/bcrypt パッケージの bcrypt.CompareHashAndPassword() 関数を使用して、プレーン テキストのパスワードとハッシュ値を比較できます。

次の Go コードを使用できます。

<code class="go">import "golang.org/x/crypto/bcrypt"

check := bcrypt.CompareHashAndPassword([]byte("a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"), []byte("enter-new-password"))
log.Println(check)</code>

このコードは、「enter-new-password」の bcrypt バージョンが指定されたハッシュ値と同じである場合、nil を返します。それ以外の場合は、エラーが返されます。

補足

  • PHP の crypt() 関数は、sha256、sha512、blowfish などを含むさまざまなハッシュ アルゴリズムをサポートしています。
  • Go では、bcrypt パッケージを使用するときにハッシュのタイプとコストを明示的に指定する必要があります。
  • 質問の特定のシナリオでは、プレフィックスとして $2a$ が存在します。ハッシュ値は Blowfish タイプのハッシュの使用を示唆しています。

以上がPHP の crypt() 関数と同等の True Go はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。