ausheng

golang:撒了盐的加密方法

package main
 
import (
	"bytes"
	"crypto/rand"
	"crypto/sha1"
	"encoding/base64"
	"fmt"
	"io"
)
 
const SaltSize = 16
 
func hashWithSalted(plain string) string {
	buf := make([]byte, SaltSize, SaltSize+sha1.Size)
	_, err := io.ReadFull(rand.Reader, buf)
	if err != nil {
		fmt.Println("random read failed ->", err)
	}
 
	h := sha1.New()
	h.Write(buf)
	h.Write([]byte(plain))
 
	return base64.URLEncoding.EncodeToString(h.Sum(buf))
}
 
func match(secret, plain string) bool {
	data, _ := base64.URLEncoding.DecodeString(secret)
	if len(data) != SaltSize+sha1.Size {
		fmt.Println("wrong length of data")
		return false
	}
	h := sha1.New()
	h.Write(data[:SaltSize])
	h.Write([]byte(plain))
	return bytes.Equal(h.Sum(nil), data[SaltSize:])
}
 
func main(){
  h := hashWithSalted("888888")
  fmt.Println(len(h), h)
 
 
  fmt.Println(match(h, "888888"))
}

ausheng

爱生活,爱编程

AUSHENG – BLOG

不要害羞,保持联系。我们喜欢结识有趣的人,结交新朋友。