我正在嘗試完成頂級代碼去學習挑戰作爲學習去的車輛。我目前正在致力於他們的Simple API Web Server problem。該問題的一部分要求您加密密碼字符串,如「{SHA256}」+ Base64編碼的SHA256摘要的用戶密碼「Golang 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的標準庫加密方法。
請注意,SHA256是一種非常不安全的散列方式(它是散列算法,而不是加密算法)的用戶密碼。您應該使用爲此設計的密鑰派生函數(KDF)。 bcrypt(https://godoc.org/golang.org/x/crypto/bcrypt)和scrypt(https://github.com/elithrar/simple-scrypt)是這裏的事實標準。 – elithrar
感謝您的指針,真的只是編程規格,以配合提供的測試數據。提供的設計還將密碼以明文方式存儲在JSON文件中。 – MrWizard54
是的,我已經聯繫他們希望他們會使用更合適的結構。它從長遠看建立了失敗的新手,因爲這樣的教訓被認爲是「權威的」。 – elithrar