go - 加密/sha256 未声明名称中的 GetSha224

标签 go sha

我刚开始使用 golang 并编写了一个非常小的脚本,除了 sha224 之外一切正常。有人可以解释一下为什么我会收到错误消息(关于我的脚本)吗?我不需要修复此错误,我想了解它以防止我这边将来出现错误。

错误 49:12: undeclared name: 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])
}

最佳答案

没有sha224包,SHA224算法在crypto/sha256中实现包(当然还有 SHA256)。这是因为 SHA224 只是 SHA256 的截断版本。

您正确导入了它,使用 sha256.New224()获取新 SHA224“哈希器”(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)))
}

关于go - 加密/sha256 未声明名称中的 GetSha224,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38829420/

相关文章:

security - SHA-256 哈希值能否从相同数据的 SHA-512 哈希值导出?

Android Key 密码丢失,但我有 keystore 密码

file-upload - 使用 OS Open 将 Golang 文件上传到 s3

unit-testing - 如何断言与 stretr/testify/mock AssertCalled 的部分匹配?

c - readFile 和 ConvertCharToIntArray 方法影响 Sha-1 的哈希实现

c++ - MurmurHash3可以分多个部分对数据 block 进行哈希处理吗?

go - 如何使用从指向结构的指针反射来遍历嵌入式结构

golang中数字类型之间的转换

go - 这个类型声明是什么意思?

c - 此 TPM 仿真器是否遵循扩展 PCR 寄存器的 TPM 规范?