首页 >后端开发 >Golang >如何在Golang中用Blowfish实现PHP的crypt()功能?

如何在Golang中用Blowfish实现PHP的crypt()功能?

Susan Sarandon
Susan Sarandon原创
2024-10-28 06:32:02483浏览

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

PHP 的 crypt() 函数的 Golang 等效项,支持 Blowfish

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn