ホームページ  >  記事  >  バックエンド開発  >  Golang の Blowfish を使用して PHP の crypt() の機能を実現するにはどうすればよいですか?

Golang の Blowfish を使用して PHP の crypt() の機能を実現するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-28 06:32:02380ブラウズ

How to Achieve the Functionality of PHP's crypt() with Blowfish in Golang?

Golang Blowfish をサポートする PHP の crypt() 関数と同等

PHP の crypt() 関数は、Blowfish を含むさまざまなハッシュ手法を提供します。 Golang でその動作を再現しようとする試みは、直接同等のものが存在しないため、困難であることが判明しています。

代替ソリューション

Golang crypt() に正確に相当するものが存在しないにもかかわらず、 、 golang.org/x/crypto/bcrypt パッケージを使用すると、効果的な代替手段が利用できます。次のコード スニペットは例を示しています。

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

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

「enter-new-password」の bcrypt ハッシュが指定されたハッシュと一致する場合、チェックは nil になります。それ以外の場合、check はエラー オブジェクトに設定されます。

考慮事項

PHP の crypt() 関数は、sha256、sha512、blowfish などのさまざまなハッシュ アルゴリズムをサポートしています。 Golang では、ハッシュ タイプ、コスト、その他のパラメーターを明示的に指定する必要があります。

提供されたハッシュ内の $2a$ プレフィックスは、Blowfish ベースのアルゴリズムの使用を示唆しています。以前の解決策のいくつかの試みではこれが考慮されておらず、不正確な結果につながりました。

golang.org/x/crypto/bcrypt/bcrypt_test.go ファイルには、このパッケージを効果的に活用する方法に関する追加の例が記載されています。

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

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