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$ 前缀建议使用基于河豚的算法。一些早期的解决方案尝试没有考虑到这一点,从而导致了不正确的结果。
golang.org/x/crypto/bcrypt/bcrypt_test.go 文件提供了有关如何有效利用此包的更多示例。
以上是如何在Golang中用Blowfish实现PHP的crypt()功能?的详细内容。更多信息请关注PHP中文网其他相关文章!