有人能向我展示如何使用Go生成一个字符串的SHA哈希值的工作示例吗?假设我有一个字符串myPassword := "beautiful"
有人能向我展示如何使用Go生成一个字符串的SHA哈希值的工作示例吗?假设我有一个字符串myPassword := "beautiful"
import (
"crypto/sha1"
"encoding/base64"
)
func (ms *MapServer) storee(bv []byte) {
hasher := sha1.New()
hasher.Write(bv)
sha := base64.URLEncoding.EncodeToString(hasher.Sum(nil))
...
}
bv := []byte(myPassword)
当然,如果不需要,您不必将其编码为base64:您可以使用Sum函数返回的原始字节数组。
下面的评论中似乎有一些小混淆。因此,让我们为下一个用户澄清有关转换为字符串的最佳实践:
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上运行此示例
Go语言官方文档中的http://golang.org/pkg/crypto/sha1/有一个示例可以演示此操作。虽然它是作为New函数的示例,但它是页面上唯一的示例,而且位于页面顶部附近,因此值得一看。完整示例如下:
代码:
h := sha1.New()
io.WriteString(h, "His money is twice tainted: 'taint yours and 'taint mine.")
fmt.Printf("% x", h.Sum(nil))
输出:
59 7f 6a 54 00 10 f9 4c 15 d7 18 06 a9 9a 2c 87 10 e7 47 bd
h.Write([]byte("some string"))
比你给出的例子使用WriteString
更为简洁。 - Brenden// Assuming 'r' is set to some inbound net/http request
form_value := []byte(r.PostFormValue("login_password"))
sha1_hash := fmt.Sprintf("%x", sha1.Sum(form_value))
// Then output optionally, to test
fmt.Println(sha1_hash)
%x
将哈希值转换为十六进制,而无需包含import "encoding/hex"
声明。func New() hash.Hash {
d := new(digest)
d.Reset()
return d
}
func Sum(data []byte) [Size]byte {
var d digest
d.Reset()
d.Write(data)
return d.checkSum()
}
func(h hash.Hash)String()string {...}
一样遵循Golang的[to]String()实现来封装该过程。h := sha1.New()
h.Write(content)
sha := h.Sum(nil) // "sha" is uint8 type, encoded in base16
shaStr := hex.EncodeToString(sha) // String representation
fmt.Printf("%x\n", sha)
fmt.Println(shaStr)
// Calculate the hexadecimal HMAC SHA1 of requestDate using sKey
key := []byte(c.SKey)
h := hmac.New(sha1.New, key)
h.Write([]byte(requestDate))
hmacString := hex.EncodeToString(h.Sum(nil))
这是一个可以用来生成SHA1哈希值的函数:
// SHA1 hashes using sha1 algorithm
func SHA1(text string) string {
algorithm := sha1.New()
algorithm.Write([]byte(text))
return hex.EncodeToString(algorithm.Sum(nil))
}
FNV32
、FNV32a
、FNV64
、FNV65a
、MD5
、SHA1
、SHA256
和 SHA512
。sha := sha256.Sum256([]byte())
[]byte
,可以转换为十六进制或base64。// Get sha1 from string
func Hashstr(Txt string) string {
h := sha1.New()
h.Write([]byte(Txt))
bs := h.Sum(nil)
sh:= string(fmt.Sprintf("%x\n", bs))
return sh
}