首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Go中生成加密() sha512散列

在Go中生成加密() sha512散列
EN

Stack Overflow用户
提问于 2014-10-05 06:08:00
回答 1查看 4.1K关注 0票数 2

我正在GoLang中开发我的授权模块。在我们使用PHP5和隐秘功能之前。哈希的生成方式类似于SHA-512:

代码语言:javascript
复制
$6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

像这样存储在数据库里。但是现在我需要让它也在GoLang中工作。我在谷歌上搜索过,尝试过不同的东西,比如:

代码语言:javascript
复制
t512 := sha512_crypt.Crypt("rasmuslerdorf", "$6$usesomesillystringforsalt$")
fmt.Printf("hash: %v\n", t512)

但都会产生不同的东西。谁能进一步帮助我们?

我们希望验证并创建类似于php版本的散列。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-05 13:32:01

osutil库在https://github.com/kless/osutil上支持所有crypt()哈希类型。

您的密码散列可以使用以下php代码生成:

代码语言:javascript
复制
echo crypt('rasmuslerdorf', '$6$usesomesillystringforsalt');

此代码生成以下哈希:

代码语言:javascript
复制
$6$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

这可以在Go中复制如下:

代码语言:javascript
复制
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)
}

运行时,它还会生成正确的散列:

代码语言:javascript
复制
$6$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

我希望这能回答你的问题。

在实现此操作时,请注意从salt中只使用了16个字符,因此对salt usesomesillystri返回相同的散列。请确保在生产代码中选择随机盐类。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26200107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档