我正在GoLang中开发我的授权模块。在我们使用PHP5和隐秘功能之前。哈希的生成方式类似于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版本的散列。
提前谢谢。
发布于 2014-10-05 13:32:01
osutil库在https://github.com/kless/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返回相同的散列。请确保在生产代码中选择随机盐类。
https://stackoverflow.com/questions/26200107
复制相似问题