在Go中生成crypt()sha512哈希

我正在使用GoLang中的授权模块。在我们将PHP5与crypt函数一起使用之前。哈希生成类似于SHA-512:

$6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

并像这样存储在数据库中。但是现在我需要使其在GoLang中也能正常工作。我在Google上进行了搜索,并尝试了不同的方法,例如:

t512 := sha512_crypt.Crypt("rasmuslerdorf", "$6$usesomesillystringforsalt$")

fmt.Printf("hash: %v\n", t512)

但是所有产生的东西都不一样。谁能进一步帮助我们?

我们要验证并创建类似php版本的哈希。

提前致谢。

回答:

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。确保在生产代码中选择无规盐。

以上是 在Go中生成crypt()sha512哈希 的全部内容, 来源链接: utcz.com/qa/410007.html

回到顶部