当前位置: 首页 > 面试题库 >

在Go中生成crypt()sha512哈希

呼延承平
2023-03-14
问题内容

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



 类似资料:
  • 我正在迁移一个使用Passlib 1.6.2生成密码哈希的平台。加密密码的代码是(调用哈希时使用轮次的默认值): 输出格式如下所示(对于密码“patient3”(无引号)): 我看得出来代表着: 算法SHA512 迭代10001 盐0DR7V7EWUMPTRFW.9Z6HKA(可能) Passlib算法是在他们的站点上定义的,它的内容如下:

  • 问题内容: 我有这个生成 HMAC (而不是简单的消息摘要)的php代码: 并与输入输出是: 我需要在Java中将其克隆。 所以这是我当前的Java克隆: 但这并不能完成工作,因为对于相同的输入(ABC),其输出为: 我尝试了很多其他的Java代码,但没有一个是php版本的精确克隆。 我做错什么了? 问题答案: 您只是忘了模仿Java代码中的行为(无论您需要使用什么)。 用 在您的Java代码中。

  • 问题内容: 例如: 有任何内置功能可以做到这一点吗? 谢谢。 问题答案: 该散包是这很有帮助。请注意,这是对特定哈希实现的抽象。在软件包子目录中可以找到一些现成的。 例: (也在这里) 输出:

  • 与其他Unix一样,AIX只存储用户密码的附加哈希。在过去,它使用DES-crypt,然后使用MD5-crypt(略有不同的版本),这与您在Linux上看到的相同。 通过使用更新版本的AIX和/etc/security/passwd,您可以使用新的SHA1/SHA256/SHA512哈希。它们如下所示(密码“secret”的哈希字符串结果示例): 配置文件 /etc/security/pwdalg

  • 问题内容: 我正在寻找一种生成元素列表的所有可能排列的方法。类似于python的 区别在于我不在乎排列是按需生成(例如python中的生成器)还是全部生成。我也不关心它们是否按字典顺序排序。我所需要做的就是以某种方式获得这些排列。 问题答案: 产生置换的算法很多。我发现的最简单的方法之一是堆算法: 通过选择一对要交换的元素,它会根据前一个生成每个排列。 在上面的链接中概述了这个想法和一个伪代码一个

  • 问题内容: 如何编写此代码?我已经拥有了,我需要通过单击按钮将相应的md5哈希发送到服务器。 问题答案: 您可以使用crypto-js。 我也建议使用SHA256,而不是MD5。 要通过NPM安装crypto-js: 或者,您可以使用CDN并引用JS文件。 然后,要显示MD5和SHA256哈希,可以执行以下操作: 此处的工作示例JSFiddle 还有其他一些JS函数会生成哈希,如下所述。 http