百万级并发IM即时消息系统(6)md5加密和注册密码加密

13_Md5工具类及注册密码加密_哔哩哔哩_bilibili

md5的常用形式

Golang Md5的4种写法与源码简单分析 - 掘金 (juejin.cn)

(5 封私信 / 2 条消息) 随机盐值(salt)是什么?泄露会出什么问题? - 知乎 (zhihu.com)

本项目用的是md5加盐:基础pwd加密之后加随机盐再加密得到字串存到数据库。

单纯一次md5容易被彩虹表破解

package utils

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

// 小写
func Md5Encode(data string) string {
	h := md5.New()
	h.Write([]byte(data))
	tempStr := h.Sum(nil)
	return hex.EncodeToString(tempStr)
}

// 大写
func MD5Encode(data string) string {
	return strings.ToUpper(Md5Encode(data))
}

// 加密 md5 + 随机数salt
func MakePassword(plainpwd, salt string) string {
	return Md5Encode(plainpwd + salt)
}

// 解密  只是用用户输入的密码+盐再重新算一遍加密和数据库中存储的加密后代码比较,知道密码是否正确
func ValidPassword(plainpwd, salt string, password string) bool {
	md := Md5Encode(plainpwd + salt)
	fmt.Println(md + "				" + password)
	return md == password
}

验证的方式是将获取的用户输入的登用用户输入的密码+盐再重新算一遍加密和数据库中存储的加密后password进行比对,如果一致说明密码正确,因为md5的碰撞很小,默认是不同的密码加密不会出现一样的加密字符。

 

 

你可能感兴趣的:(go,IM聊天系统,golang)