2010-03-04 53 views
31

我剛剛從Golang開始,現在我堅持創建MD5。這是我開始得到來自string一個md5哈希:如何從Golang中的字符串獲取MD5哈希?

import "crypto/md5" 

var original = "my string comes here" 
var hash = md5.New(original) 

但顯然這不是它的工作原理。有人能爲我提供一個工作樣本嗎?

+0

這個問題的最佳答案是在@Alexei Danchenkov的評論下面。我已經在一個快速運行的示例中實現了它們:https://play.golang.org/p/e7v_erP7Gc – Aaron

回答

26

參考Sum,對我而言,followin摹做工精良:

package main 

import (
    "crypto/md5" 
    "fmt" 
) 

func main() { 
    data := []byte("hello") 
    fmt.Printf("%x", md5.Sum(data)) 
} 
32

crypto/md5 doc

package main 

import (
    "crypto/md5" 
    "fmt" 
    "io" 
) 

func main() { 
    h := md5.New() 
    io.WriteString(h, "The fog is getting thicker!") 
    fmt.Printf("%x", h.Sum(nil)) 
} 
+3

strings.Bytes不再存在了,它是[]字節(原始) – marketer

+5

看起來像'Hash .Sum()'現在需要一個字節片作爲第一個參數。 'h.Sum([] byte {})'將修復這個例子。 –

+7

我已經看過這個例子取自的文檔,但是您沒有添加任何內容,例如解釋。爲什麼需要io.WriteString()?爲什麼h.Sum()需要nil作爲參數而不是使用給定的字符串?一個GoNoob閱讀的例子是相當普通的。 –

29

我發現這個解決方案很好地工作

12

我用這個MD5哈希我的弦:

import (
    "crypto/md5" 
    "encoding/hex" 
) 

func GetMD5Hash(text string) string { 
    hasher := md5.New() 
    hasher.Write([]byte(text)) 
    return hex.EncodeToString(hasher.Sum(nil)) 
} 
18
import (
    "crypto/md5" 
    "encoding/hex" 
) 

func GetMD5Hash(text string) string { 
    hash := md5.Sum([]byte(text)) 
    return hex.EncodeToString(hash[:]) 
} 
0

這是一個功能,你可以用它來生成一個MD5散列:

// MD5 hashes using md5 algorithm 
func MD5(text string) string { 
    algorithm := md5.New() 
    algorithm.Write([]byte(text)) 
    return hex.EncodeToString(algorithm.Sum(nil)) 
} 

我放在一起一組的那些實用的散列函數在這裏:https://github.com/shomali11/util

你會找到FNV32,FNV32a, FNV64, FNV65a,MD5,SHA1,SHA256SHA512