我只是用golang开始编写一个非常小的脚本,除了sha224之外一切正常。有人可以解释我,为什么我得到错误(关于我的脚本)?我不需要修复此错误,我想了解它以防止我未来的错误。
错误 49:12:未声明的名称:sha224 表示我没有声明某些内容,但我找不到它,因为我对所有哈希算法都做了同样的事情。
我不是程序员,也不是golang的专家。这是关于我的第一个去项目。
package main
import (
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
"crypto/sha512"
"encoding/hex"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "http://45.32.153.207/index2.php"
fmt.Printf("HTML code of %s ...\n", url)
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
html, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", html)
toHash := CToGoString(html[:])
fmt.Printf("%s\n", GetMD5Hash(toHash))
fmt.Printf("%s\n", GetSha1Hash(toHash))
fmt.Printf("%s\n", GetSha224Hash(toHash))
fmt.Printf("%s\n", GetSha256Hash(toHash))
fmt.Printf("%s\n", GetSha512Hash(toHash))
}
func GetMD5Hash(text string) string {
hasher := md5.New()
hasher.Write([]byte(text))
return hex.EncodeToString(hasher.Sum(nil))
}
func GetSha1Hash(text string) string {
hasher := sha1.New()
hasher.Write([]byte(text))
return hex.EncodeToString(hasher.Sum(nil))
}
func GetSha224Hash(text string) string {
hasher := sha224.New()
hasher.Write([]byte(text))
return hex.EncodeToString(hasher.Sum(nil))
}
func GetSha256Hash(text string) string {
hasher := sha256.New()
hasher.Write([]byte(text))
return hex.EncodeToString(hasher.Sum(nil))
}
func GetSha512Hash(text string) string {
hasher := sha512.New()
hasher.Write([]byte(text))
return hex.EncodeToString(hasher.Sum(nil))
}
func CToGoString(c []byte) string {
n := -1
for i, b := range c {
if b == 0 {
break
}
n = i
}
return string(c[:n+1])
}
答案 0 :(得分:3)
没有sha224
包,SHA224算法在crypto/sha256
包中实现(当然还有SHA256)。这是因为SHA224只是SHA256的截断版本。
您正确导入了它,使用sha256.New224()
功能获取新的SHA224" hasher" (hash.Hash
):
func GetSha224Hash(text string) string {
hasher := sha256.New224()
hasher.Write([]byte(text))
return hex.EncodeToString(hasher.Sum(nil))
}
注意:如果您只想散列一些数据,则不需要创建一个哈希。大多数包提供了执行此操作的快捷方式,例如sha256.Sum224()
:
func GetSha224Hash(text string) string {
s := sha256.Sum224([]byte(text))
return hex.EncodeToString(s[:])
}
或者这是一个单行:
func GetSha224Hash(text string) string {
return fmt.Sprintf("%x", sha256.Sum224([]byte(text)))
}