go语言使用MD5

简介

MD5全称Message Digest Algorithm 5(信息摘要算法)

  1. 压缩性:任意长度的数据,算出MD5值长度都是固定的
  2. 容易计算:从原数据计算出MD5值很容易
  3. 抗修改性:从原数据进行任何修改,哪怕1个字节,MD5值差异很大
  4. 强碰撞:想找到两个不同的数据,使他们具有相同的MD5值,非常困难
  5. 不可逆性:不可反解

应用场景

  1. 密码的加密存储:用户设置密码时,服务只需要将这个密码的MD5储存在数据库中,而不是记录密码本身,以后需要验证用户身份时,只需要将用户输入的密码再次做MD5后,与数据库储存的MD5做比较即可验证密码的正确性
  2. 数字签名:平常发布程序,为了防止别人在程序中插入病毒或者木马,发布程序时会公开这个程序的MD5码,当有人下载的时候只需要对这个程序做一次MD5,然后跟公开的MD5做比较就可以知道这个程序是否被第三方修改过
  3. 文件完整性验证:当下载一个文件时,服务器返回的信息包括这个文件的MD5,在本地下载完毕时进行MD5,比较两个MD5验证文件的完整性
  4. 文件上传:例如百度云实现的秒传,当你进行文件上传时,会先对你的文件进行校验,对文件进行MD5与数据库中做对比,如果服务器中已经有这个文件了,就在数据库中记录文件的地址,完成上传

测试MD5

package main

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

func generatorMD5(code string) string {
	MD5 := md5.New()
	_, _ = io.WriteString(MD5, code)
	return hex.EncodeToString(MD5.Sum(nil))
}

func main() {
	fmt.Println(generatorMD5("123456"))
}

在这里插入图片描述
在这里插入图片描述
我们使用MD5进行加密的值,可以在网上随便的被解密;这种做法并不是对MD5进行反解得到的,而是暴力破解;大概的原理就是事现将一些常见的密码进行MD5然后将明文与MD5储存到数据库中表中,这张表叫彩虹表;等到我们进行解密的时候再进行反向查询.并不能说明MD5不具备不可逆性;

盐值加密

为了应对上面所说的场景;我们可以使用盐值加密:

  1. 通过生成随机数和用户设置的密码进行组合
  2. 数据库同时存储MD5值和salt值,验证其正确性使用salt进行MD5即可

go-password-encoder

package main

import (
	"crypto/md5"
	"fmt"
	"github.com/anaskhan96/go-password-encoder"
)

func main() {
	options := &password.Options{10, 100, 32, md5.New}
	salt, encodedPwd := password.Encode("123456", options)
	fmt.Println("salt:::::::",salt)
	fmt.Println("encodedPwd:::::::",encodedPwd)
	check := password.Verify("123456", salt, encodedPwd, options)
	fmt.Println(check) // true
}

在这里插入图片描述
在这里插入图片描述
再次进行解密时已经解密不出来明文了,即使能解密出来明文,那也是我们的salt和用户输入的密码的组合;使用明文仍然不会破解出来用户的密码,也不会对我们的系统造成影响

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.番茄炒蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值