当前位置:网站首页>golang实现MD5,SHA256,bcrypt加密
golang实现MD5,SHA256,bcrypt加密
2022-04-23 06:15:00 【玩哈哈527】
golang实现MD5,SHA256,bcrypt加密
前言
加密算法肯定可以解密。MD5,SHA256,bcrypt算法都是不可逆不可解密的,所以不是加密算法,例如2+3得到5,但是5不知道是否由2+3得到,也可能1+4,0+5,所以不可逆。经常混淆的叫加密算法,但实质是散列算法。
一、MD5算法 目前已不够安全,可通过彩虹表很容易破解
代码如下(示例):
func MD5(password string) string {
hash := MD5.New()
hash.Write([]byte(password))
res:=hex.EncodeToString(hash.Sum(nil))
fmt.Println(len(res))
return res
}
//MD5加盐加密 比不加盐安全性高,但是也不足够安全
func MD5(password string) string {
const salt = "2021/10/21"//自定义加盐
hash := MD5.New()
hash.Write([]byte(password+salt))//密码与盐自定义组合
res:=hex.EncodeToString(hash.Sum(nil))
fmt.Println(len(res))
return res
}
二、SHA256算法 相对MD5更加安全,当然SHA512长度更长更加安全,但性能需求更大
代码如下(示例):
func SHA256(password string) string {
hash := sha256.New()
hash.Write([]byte(password))
res:=hex.EncodeToString(hash.Sum(nil))
fmt.Println(len(res))
return res
}
//加盐加密
func SHA256(password string) string {
const salt = "2021/10/21"//自定义加盐
hash := sha256.New()
hash.Write([]byte(password+salt))//密码与盐自定义组合
res:=hex.EncodeToString(hash.Sum(nil))
fmt.Println(len(res))
return res
}
三、bcrypt算法 破解的成本更高,更加安全,bcrypt算法包含了随机加盐,也更加方便
bcrypt安装包 go get golang.org/x/crypto/bcrypt
代码如下(示例):
//密码编码为哈希值
func HashPassword(password string) (string, error) {
start:=time.Now()
bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)//bcrypt.DefaultCost默认数值10,编码一次100ms以内,可增大数值,增加破解时间成本,例如设置为14,编码一次1s以上
time:=time.Since(start)
log.Printf("Encode Password time:%s",time)
return string(bytes), err
}
//验证密码,例如实际业务中登录密码与数据库存储的哈希值比较,以此验证是否相等
func MatchPasswordHash(password, hash string) bool {
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil
}
版权声明
本文为[玩哈哈527]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_28058509/article/details/120974152
边栏推荐
猜你喜欢

以智能生产引领行业风潮!美摄智能视频生产平台亮相2021世界超高清视频产业发展大会

关于短视频平台框架搭建与技术选型探讨

机器视觉系列(01)---综述

CMSIS CM3源码注解

基于openmv的无人机Apriltag动态追踪降落完整项目资料(labview+openmv+apriltag+正点原子四轴)

Paddleocr image text extraction

PyTorch 10. Learning rate

Modifying a column with the 'identity' pattern is not supported

机器学习——PCA与LDA

直观理解 torch.nn.Unfold
随机推荐
GIS实战应用案例100篇(三十四)-拼接2020globeland30
Modifying a column with the 'identity' pattern is not supported
重大安保事件应急通信系统解决方案
enforce fail at inline_container.cc:222
基于51单片机的体脂检测系统设计(51+oled+hx711+us100)
主流 RTOS 评估
PyTorch 14. Module class
机器视觉系列(02)---TensorFlow2.3 + win10 + GPU安装
项目文件“ ”已被重命名或已不在解决方案中、未能找到与解决方案关联的源代码管理提供程序——两个工程问题
使用 trt 的int8 量化和推断 onnx 模型
吴恩达编程作业——Logistic Regression with a Neural Network mindset
Systrace 解析
By onnx checker. check_ Common errors detected by model
PyTorch 12. Hook usage
ECDSA 签名验证原理及C语言实现
excel实战应用案例100讲(八)-Excel的报表连接功能
torch.where能否传递梯度
Infrared sensor control switch
AUTOSAR从入门到精通100讲(八十一)-AUTOSAR基础篇之FiM
安装 pycuda 出现 PEP517 的错误