douzhai7873 2014-10-05 06:08
浏览 270
已采纳

在Go中生成crypt()sha512哈希

I am working on my authorization module in GoLang. Before we used PHP5 with the crypt function. The hash was generated like SHA-512:

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

And stored like that in the database. But now I need make it work also in GoLang. I have searched on Google and tried different things, such as:

t512 := sha512_crypt.Crypt("rasmuslerdorf", "$6$usesomesillystringforsalt$")
fmt.Printf("hash: %v
", t512)

But all generate different things. Who can help us further?

We want validate and create hashes like the php version.

Thanks in advance.

  • 写回答

1条回答 默认 最新

  • douyou8266 2014-10-05 13:32
    关注

    The osutil library at https://github.com/kless/osutil has support for all crypt() hash types.

    Your password hash can be produced with the following php code:

    echo crypt('rasmuslerdorf', '$6$usesomesillystringforsalt');
    

    This code produces the following hash:

    $6$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
    

    This can be reproduced in Go like this:

    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)
    }
    

    When run, it also produces the correct hash:

    $6$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
    

    I hope this answers your question.

    While implementing this please note that only 16 characters are used from the salt, so the same hash is returned for the salt usesomesillystri. Make sure that you choose random salts in the production code.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大