Golang Base64编码用户密码的SHA256摘要

时间:2015-06-20 16:19:34

标签: hash go cryptography sha256

我正在尝试完成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的标准库加密方法。

1 个答案:

答案 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}}

游乐场:http://play.golang.org/p/oFBePRQzhN