我正在使用GoLang中的授权模块。在我们使用PHP5和crypt函数之前。哈希的生成类似于SHA-512:
$6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
并将其存储在数据库中。但现在我需要让它在GoLang中运行。我在谷歌上搜索并尝试了不同的东西,例如:
t512 := sha512_crypt.Crypt("rasmuslerdorf", "$6$usesomesillystringforsalt$")
fmt.Printf("hash: %v\n", t512)
但是所有都产生了不同的东西。谁可以帮助我们?
我们想要验证并创建像php版本一样的哈希。
提前致谢。
答案 0 :(得分:6)
https://github.com/kless/osutil上的osutil
库支持所有crypt()
哈希类型。
您的密码哈希可以使用以下php代码生成:
echo crypt('rasmuslerdorf', '$6$usesomesillystringforsalt');
此代码生成以下哈希:
$6$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
这可以像以下一样在Go中复制:
package main
import (
"fmt"
"github.com/kless/osutil/user/crypt/sha512_crypt"
)
func main() {
c := sha512_crypt.New()
hash, err := c.Generate([]byte("rasmuslerdorf"), []byte("$6$usesomesillystringforsalt"))
if err != nil {
panic(err)
}
fmt.Println(hash)
}
运行时,它还会生成正确的哈希:
$6$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
我希望这能回答你的问题。
执行此操作时请注意,salt中只使用了16个字符,因此为salt usesomesillystri
返回相同的哈希值。确保在生产代码中选择随机盐。