md5加密庫(crypto/md5)

MD5訊息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函數,可以產生出一個128位元(16位元組)的散列值(hash value),用於確保信息傳輸完整一致。

MD5

MD5算法因其普遍、穩定、快速的特點,仍廣泛應用於普通數據的錯誤檢查領域。

1996年後被證實存在弱點,可以被加以破解,對於需要高度安全性的資料,專家一般建議改用其他演算法。

Online generator md5 hash of a string:http://www.md5.cz/

範例程式

// Some code
package main

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

	"github.com/pkg/errors"
)

type User struct {
	Account string
	Pass    string
}

var m map[string]User

func main() {
	m = make(map[string]User)
	s := User{Account: "a", Pass: "b"}

	if err := registryUser(s); err != nil {
		fmt.Printf("registryUser failed %s", s.Account)
	}
	if err := registryUser(s); err != nil {
		fmt.Printf("registryUser failed %s", s.Account)
	}

	ls := User{Account: "a", Pass: "b"}
	err := loginUser(ls)
	if err != nil {
		fmt.Printf("User failed %s", ls.Account)
	}

	ls2 := User{Account: "aa", Pass: "bss"}

	if err := loginUser(ls2); err != nil {
		fmt.Printf("User failed %s", ls2.Account)
	}

}

func registryUser(s User) error {
	if _, ok := m[s.Account]; ok {
		return errors.Errorf("User alread Used.")
	}
	su := s
	su.Pass = hashBymd5(s.Pass)
	m[s.Account] = su
	return nil
}

func loginUser(u User) error {
	u, ok := m[u.Account]
	if !ok {
		return errors.Errorf("User not found.")
	}

	if u.Pass != hashBymd5(u.Pass) {
		return errors.Errorf("Pass not found.")
	}
	return nil
}

func hashBymd5(str string) string {
	h := md5.New()
	h.Write([]byte(str))
	return hex.EncodeToString(h.Sum(nil))
}

Last updated