我正在尝试完成Top Code Go学习挑战作为学习去的工具。我正在研究他们的Simple API Web Server problem。部分问题要求您加密密码字符串,如“'{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-OeoEm9r7NCzmWexUULaa4 =
但我得到{SHA256} YWJjZDEyMzTjsMRCmPwcFJr79MiZb7kkJ65B5GSbk0yklZkbeFK4VQ ==。我怀疑我使用加密库是错误的,但我不确定我应该使用什么,因为这似乎是SHA256的标准库加密方法。
答案 0 :(得分:6)
您滥用hash.Hash
方法。 h.Sum
界面的docs清楚地说明了
Sum 将当前哈希值附加到b并返回结果切片。
(强调补充。)
您需要将数据写入哈希并使用h.Write([]byte(password))
b := h.Sum(nil)
这样的
h := sha256.Sum256([]byte(password))
或只使用sha256.Sum256
{{1}}