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 サイトの他の関連記事を参照してください。