Golang封装加盐和加密次数的MD5函数

本文介绍了如何在Golang中封装带有加盐和加密次数的MD5函数。作者在重构SpringBoot应用时,发现Golang标准库中的MD5函数未提供此类封装。通过研究Java的Shiro框架,了解到多次加密并不只是简单地重复加盐过程,而是每次加密后清空中间状态。最后,作者将Java的实现转换为Golang代码,实现了加盐并多轮加密的MD5功能。
摘要由CSDN通过智能技术生成

最近在使用Gin重构之前用SpringBoot写的后台程序,数据库中保存的密码是加了盐并经过两次hash的MD5值,之前SpringBoot是调用的Shiro进行两次MD5运算。查了一圈发现Golang的MD5工具库并没有提供加盐、加密次数的封装,并且也没有博客提及,所以这里记录一下自己封装的带加盐和加密次数的MD5函数

Golang中使用MD5库

Golang自带的crypto加密库中有MD5函数的实现,主要使用方式有两种,一种是调用write将要计算的byte数组提前写入block块中,调用sum时传入nil;二是直接将byte数组传入sum函数,如下所示:

package utils

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

// 方式一通过Write传参
func MD5(str string) string {
	b := []byte(str)
	h := md5.New()
	h.Write(b)
	return hex.EncodeToString(h.Sum(nil))
}

// 方式二通过Sum传参
func MD5_2(str string) string {
	b := []byte(str)
	h := md5.New()
	return hex.EncodeToString(h.Sum(b))
}

若要加盐的话,在第一种方式的基础上再把salt給write进去,如下所示:

func MD5_SALT(str string, salt string) string {
	b := []byte(str)
	s := []byte(salt)
	h := md5.New()
	h.Write(s) // 先写盐值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值