使用 golang 生成字符串的 SHA 哈希

新手上路,请多包涵

有人可以向我展示一个工作示例,说明如何使用 Go 生成我拥有的字符串的 SHA 哈希,比如 myPassword := "beautiful" 吗?

原文由 Sankar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 968
2 个回答

一个例子 :

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

func (ms *MapServer) storee(bv []byte) {
    hasher := sha1.New()
    hasher.Write(bv)
    sha := base64.URLEncoding.EncodeToString(hasher.Sum(nil))
        ...
}

在这个例子中,我从字节数组创建了一个 sha。您可以使用获取字节数组

bv := []byte(myPassword)

当然,如果不需要,则不需要使用 base64 对其进行编码:您可以使用 Sum 函数返回的原始字节数组。

下面的评论似乎有些混乱。因此,让我们为下一个用户阐明转换为字符串的最佳实践:

  • 您永远不会将 SHA 作为字符串存储在数据库中,而是作为原始字节
  • 当您想向用户显示 SHA 时,常用的方法是 十六进制
  • 当你想要一个字符串表示,因为它必须适合 URL 或文件名时,通常的解决方案是 Base64 ,它更紧凑

原文由 Denys Séguret 发布,翻译遵循 CC BY-SA 3.0 许可协议

Go By Example 有一个关于 sha1 散列的页面。

 package main

import (
    "fmt"
    "crypto/sha1"
    "encoding/hex"
)

func main() {

    s := "sha1 this string"
    h := sha1.New()
    h.Write([]byte(s))
    sha1_hash := hex.EncodeToString(h.Sum(nil))

    fmt.Println(s, sha1_hash)
}

你可以 在 play.golang.org 上运行这个例子

原文由 Xeoncross 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题