Hash Golang Base64编码的SHA256用户摘要’;密码

Hash Golang Base64编码的SHA256用户摘要’;密码,hash,go,cryptography,sha256,Hash,Go,Cryptography,Sha256,作为学习围棋的工具,我正在尝试完成顶级代码围棋学习挑战。我现在正在做他们的工作。该问题的一部分要求您将密码字符串加密为“{SHA256}”+Base64编码的用户密码SHA256摘要” 我使用了以下代码来实现这一点,但结果与提供的测试用例不匹配 import ( "encoding/base64" "crypto/sha256" ) func encrtyptPasswords(password string) string { h := sha256.New()

作为学习围棋的工具,我正在尝试完成顶级代码围棋学习挑战。我现在正在做他们的工作。该问题的一部分要求您将密码字符串加密为“{SHA256}”+Base64编码的用户密码SHA256摘要”

我使用了以下代码来实现这一点,但结果与提供的测试用例不匹配

import (
    "encoding/base64"
    "crypto/sha256"
)

func encrtyptPasswords(password string) string {
    h := sha256.New()
    return "{SHA256}" + 
       string(base64.StdEncoding.EncodeToString(h.Sum([]byte(password))))
}
对于abcd1234的输入,它应该加密到:{SHA256}6c7nGrky_ehjM40Ivk3p3-OEOEM9R7NCZMWEXULA4=


但是我得到了{SHA256}YWJjZDEyMzTjsMRCmPwcFJr79MiZb7kkJ65B5GSbk0yklZkbeFK4VQ==。我怀疑我使用的加密库是错误的,但我不确定应该使用什么,因为这似乎是SHA256的标准库加密方法。

您误用了
求和
方法。
hash.hash
接口的

Sum将当前哈希追加到b并返回结果切片

(重点加上。)

您需要将数据写入散列,然后像这样使用
h.Sum

h.Write([]byte(password))
b := h.Sum(nil)
或者只是使用


操场:。

FWIW
b:=h.Sum(nil)
也适用于您的第一个示例。这非常好。有一个问题,结果已经在摘要上了吗?请注意,SHA256是一种非常不安全的散列用户密码的方法(它是散列算法,而不是加密算法)。您应该使用为此目的而设计的密钥派生函数(KDF)。bcrypt()和scrypt()是这里事实上的标准。感谢您的指针,实际上只是根据规范进行编程,以匹配提供的测试数据。提供的设计还将密码存储在JSON文件的clear中。是的,我已经联系过他们,希望他们能使用更合适的结构。从长远来看,这样的经验教训被认为是“权威性的”,这会让新手们面临失败。
h := sha256.Sum256([]byte(password))