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

我正在尝试完成“热门代码围棋学习挑战”作为学习围棋的工具。 我目前正在解决他们的简单API Web服务器问题。 该问题的一部分要求您对密码字符串进行加密,例如“'{SHA256}'+用户密码的Base64编码的SHA256摘要” </ p>

我已使用以下代码进行操作 这样,但结果与提供的测试用例不匹配。 </ p>

  import(
“ encoding / base64”
“ crypto / sha256”

func encrtyptPasswords(密码字符串)字符串{
h:= sha256。 New()
返回“ {SHA256}” +
字符串(base64.StdEncoding.EncodeToString(h.Sum([] byte(password))))
}
</ code> </ pre>

有关ABCD1234的输入应该加密以:{SHA256} 6c7nGrky_ehjM40Ivk3p3-OeoEm9r7NCzmWexUULaa4 = </ p>

,但我得到{SHA256} YWJjZDEyMzTjsMRCmPwcFJr79MiZb7kkJ65B5GSbk0yklZkbeFK4VQ ==代替。 我怀疑我使用了错误的加密库,但是我不确定应该使用什么,因为这似乎是对SHA256进行加密的标准库方法。</ p>
</ div>

展开原文

原文

I am attempting to complete the Top Code Go Learning Challenges as a vehicle to learn go. I'm currently working on their Simple API Web Server problem. Part of that problem calls for you to encrypt a password string as such "‘{SHA256}’ + Base64 encoded SHA256 digest of the user’s password"

I've used the following code to do this, but the results don't match the test case provided.

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

func encrtyptPasswords(password string) string {
    h := sha256.New()
    return "{SHA256}" + 
       string(base64.StdEncoding.EncodeToString(h.Sum([]byte(password))))
}

For an input of abcd1234 it should encrypt to: {SHA256}6c7nGrky_ehjM40Ivk3p3-OeoEm9r7NCzmWexUULaa4=

But I get {SHA256}YWJjZDEyMzTjsMRCmPwcFJr79MiZb7kkJ65B5GSbk0yklZkbeFK4VQ== instead. I suspect I'm using the encryption libraries wrong, but I'm not sure what I should be using as this seems to be the standard library method of encryption to SHA256.

duandu8892
duandu8892 是的,我已经与他们联系,希望他们会使用更合适的结构。从长远来看,它为失败者设置了新手,因为这样的教训是“权威性的”。
5 年多之前 回复
dongshuxi3105
dongshuxi3105 谢谢您的指导,实际上只是对规范进行编程以匹配提供的测试数据。所提供的设计还将密码以明文形式存储在JSON文件中。
5 年多之前 回复
doutang7414
doutang7414 请注意,SHA256是一种非常不安全的方式来哈希用户密码(这是哈希算法,而不是加密算法)。您应该使用为此目的设计的密钥派生功能(KDF)。bcrypt(godoc.org/golang.org/x/crypto/bcrypt)和scrypt(github.com/elithrar/simple-scrypt)是这里的事实上的标准。
5 年多之前 回复

1个回答



您误用了 Sum </ code>方法。 hash.Hash </ code>界面的文档明确指出</ p>


总和将</ em>当前哈希添加到b并返回结果切片。</ p>
</ blockquote>

(添加了强调。)</ p>

您需要将数据写入哈希并使用 h.Sum </ code>这样</ p>

< pre> h.Write([] byte(password))
b:= h.Sum(nil)
</ code> </ pre>

或仅使用 sha256.Sum256 </ code> </ p>

 <  code> h:= sha256.Sum256([] byte(password))
</ code> </ pre>

游乐场: http://play.golang.org/p/oFBePRQzhN 。</ p>
</ div>

展开原文

原文

You're misusing the Sum method. The docs for the hash.Hash interface clearly say that

Sum appends the current hash to b and returns the resulting slice.

(Emphasis added.)

You need to either write the data to the hash and use h.Sum like this

h.Write([]byte(password))
b := h.Sum(nil)

or just use sha256.Sum256

h := sha256.Sum256([]byte(password))

Playground: http://play.golang.org/p/oFBePRQzhN.

douwen4178
douwen4178 谢谢,编辑。
5 年多之前 回复
dongyuan1902
dongyuan1902 FWIW b:= h.Sum(nil)也适用于您的第一个示例。
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐