首页 >后端开发 >Golang >Go 中是否存在与 PHP 的 crypt() 函数等价的函数?

Go 中是否存在与 PHP 的 crypt() 函数等价的函数?

Linda Hamilton
Linda Hamilton原创
2024-10-29 05:10:31349浏览

Is There a True Go Equivalent to PHP's crypt() Function?

寻找 PHP 的 crypt() 函数的 Go 等效项

PHP 和 Golang 中的 Crypt 函数

问题介绍

PHP crypt() 函数使用指定的算法生成给定字符串的哈希值。最近出现了一个问题,寻找与此函数等效的 Golang,该函数将为特定输入和哈希值生成相同的结果。

不成功的尝试

进行了多次尝试来实现Go 相当于 PHP 的 crypt() 函数:

  • 尝试 1: go-crypt 模块没有产生相同的结果。
  • 尝试 2 : 使用 C 互操作性定义自定义 crypt 函数也失败。
  • 尝试 3: bcrypt 包不支持 PHP5.3 及更早版本使用的 CRYPT_BLOWFISH 算法。

解决方案

尽管没有找到确切的“Go crypt function”等效项,但发现了替代方案:

  • 使用 golang.org/x/crypto/bcrypt 包中,bcrypt.CompareHashAndPassword() 函数可用于比较纯文本密码与哈希值。

示例

可以使用以下Go代码:

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

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

如果“enter-new-password”的bcrypt版本与提供的哈希值相同,则此代码将返回nil;

补充说明

  • PHP 的 crypt() 函数支持多种哈希算法,包括 sha256、sha512、blowfish 等。
  • 在 Go 中,使用 bcrypt 包时需要显式指定哈希类型和成本。
  • 对于问题中的具体场景,$2a$ 作为前缀的存在哈希值建议使用 Blowfish 类型哈希。

以上是Go 中是否存在与 PHP 的 crypt() 函数等价的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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