ホームページ >バックエンド開発 >Golang >Go で CRYPT_BLOWFISH と同等の PHP の crypt() 関数を実現するにはどうすればよいですか?

Go で CRYPT_BLOWFISH と同等の PHP の crypt() 関数を実現するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 15:38:29962ブラウズ

 How to Achieve PHP's crypt() Function Equivalence for CRYPT_BLOWFISH in Go?

Go と同等の PHP crypt() 関数

質問:

Go 関数を模倣するにはどうすればよいですか?特定の入力文字列に対する PHP の crypt() 関数の動作。ここで、CRYPT_BLOWFISH による PHP の crypt() 評価の結果は true?

試行と期待される結果:

試行は行われています。これを達成するために作成されましたが、成功しませんでした:

  • 試行 1:
    github.com/nyarla/go-crypt モジュールを使用すると、結果は false でした。
  • 試行 2:
    C 相互運用機能を使用したカスタム crypt 関数の作成も false となりました。
  • 試行 3:
    別の Go モジュール試行されましたが、CRYPT_BLOWFISH のサポートがありませんでした。

望ましい結果は、Go crypt() 関数が文字列「enter-new-password」と「$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj」を正しく評価することです。 .8jgmtzZP2" を true に設定します。PHP の crypt() と同様です。

解決策:

Go では正確に P​​HP crypt() に相当するものが見つかりませんでしたが、代替手段ソリューションが実装されました:

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

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

if check == nil {
    fmt.Println("Passwords match")
} else {
    fmt.Println("Passwords don't match")
}</code>

このアプローチでは、golang.org/x/crypto/bcrypt モジュールを利用して、提供されたパスワードと保存されているハッシュ値を比較します。 CompareHashAndPassword() 関数は、パスワードが一致する場合は nil を返し、一致しない場合はエラーを返します。

補足:

PHP の crypt 関数は複数のハッシュ アルゴリズムを提供していることに注意することが重要です。 sha256、sha512、フグなど。 Go では、特定のアルゴリズムを処理するためにさまざまなモジュールが必要になることがよくあります。この場合、PHP の例で使用されている Blowfish タイプのハッシュは、試行されたどの Go モジュールでもネイティブにサポートされていません。したがって、代わりに bcrypt モジュールが使用されました。

以上がGo で CRYPT_BLOWFISH と同等の PHP の crypt() 関数を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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