Go語言實現單向雜湊函式 —— MD5訊息摘要演算法、SHA256與224(Go語言實現)
阿新 • • 發佈:2018-11-25
MD5訊息摘要演算法
MD5訊息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。
Go語言實現方式一:
package main import ( "fmt" "crypto/md5" "encoding/hex" ) func main() { var a = []byte("i am the reader") hash := md5.New() _, err := hash.Write(a) if err!=nil{ fmt.Println("hash.Write faild") } hashed := hash.Sum(nil) fmt.Println("a 的md5單向雜湊為:",hex.EncodeToString(hashed[:])) hash.Reset() _, err= hash.Write([]byte("hello world")) if err!=nil{ fmt.Println("hash.Write faild") } hashed = hash.Sum(nil) fmt.Println("a 的md5單向雜湊為:",hex.EncodeToString(hashed[:])) }
Go語言實現方式二:
package main
import (
"fmt"
"crypto/md5"
"encoding/hex"
)
func main() {
hashed := md5.Sum([]byte("i am the reader"))
fmt.Println("a 的md5單向雜湊為:",hex.EncodeToString(hashed[:]))
}
其兩者區別為:用過一次之後可以reset以下,然後可以重複使用,而方式二不可以。
方式一程式碼比較多,而方式二程式碼就很少。
SHA256與224
package main import ( "crypto/sha256" "encoding/hex" "fmt" ) func main1() { hash := sha256.New() hash.Write([]byte("i am the reader")) sum := hash.Sum(nil) fmt.Println(sum) fmt.Println(len(sum) * 8) s := hex.EncodeToString(sum) fmt.Println(s) fmt.Println(len(s) * 8) } //結果為: //[84 251 192 78 28 190 247 247 180 155 4 177 16 2 249 160 236 10 217 96 213 242 65 37 24 13 212 58 232 98 129 229] //256 //54fbc04e1cbef7f7b49b04b11002f9a0ec0ad960d5f24125180dd43ae86281e5 //512 func main2() { s1 := sha256.Sum256([]byte("i am the reader")) fmt.Println(len(s1) * 8) fmt.Println(s1) s := hex.EncodeToString(s1[:]) fmt.Println(s) fmt.Println(len(s) * 8) } //結果為: //256 //[84 251 192 78 28 190 247 247 180 155 4 177 16 2 249 160 236 10 217 96 213 242 65 37 24 13 212 58 232 98 129 229] //54fbc04e1cbef7f7b49b04b11002f9a0ec0ad960d5f24125180dd43ae86281e5 //512 func main3() { hash := sha256.New224() hash.Write([]byte("i am the reader")) sum := hash.Sum(nil) fmt.Println(sum) fmt.Println(len(sum) * 8) s := hex.EncodeToString(sum) fmt.Println(s) fmt.Println(len(s) * 8) } //結果為: //[249 203 73 14 85 217 122 47 50 255 162 90 1 24 181 52 4 26 201 18 73 182 159 29 205 205 201 208] //224 //f9cb490e55d97a2f32ffa25a0118b534041ac91249b69f1dcdcdc9d0 //448