当前位置:网站首页>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
边栏推荐
- AUTOSAR从入门到精通100讲(八十六)-UDS服务基础篇之2F
- AUTOSAR从入门到精通100讲(五十二)-诊断和通信管理功能单元
- Wechat applet uses wxml2canvas plug-in to generate some problem records of pictures
- ECDSA 签名验证原理及C语言实现
- 基于51单片机的三路超声波测距系统(定时器方式测距)
- 美摄助力百度“度咔剪辑”,让知识创作更容易
- unhandled system error, NCCL version 2.7.8
- 江宁医院DMR系统解决方案
- 广西电网|应急空天一体化通信系统方案
- excel实战应用案例100讲(八)-Excel的报表连接功能
猜你喜欢
WinForm scroll bar beautification
Int8 quantification and inference of onnx model using TRT
利用mysql-binlog恢复数据
城市应急管理|城市突发事故应急通信指挥调度系统
自组网灵活补盲|北峰油气田勘测解决方案
直观理解 torch.nn.Unfold
使用proteus仿真STM32超声波SRF04测距!Code+Proteus
imx6ull-qemu 裸机教程1:GPIO,IOMUX,I2C
【无标题】制作一个0-99的计数器,P1.7接按键,P2接数码管段,共阳极数码管,P3.0,P3.1接数码管位码,每按一次键,数码管显示加一。请写出单片机的C51代码
网络层重要知识(面试、复试、期末)
随机推荐
被 onnx.checker.check_model 检查出的常见错误
GIS实战应用案例100篇(三十四)-拼接2020globeland30
基于51单片机的体脂检测系统设计(51+oled+hx711+us100)
初探智能指针之std::shared_ptr、std::unique_ptr
unhandled system error, NCCL version 2.7.8
ECDSA 签名验证原理及C语言实现
枫桥学院开元名庭酒店DMR系统解决方案
Pep517 error during pycuda installation
如何利用qemu搭建SOC protoype:80行代码实现一个Cortex M4 模拟器
AUTOSAR从入门到精通100讲(五十一)-AUTOSAR网络管理
关于短视频平台框架搭建与技术选型探讨
Gather, unsqueeze and other operators when PTH is converted to onnx
imx6ull-qemu 裸机教程2:USDHC SD卡
【51单片机交通灯仿真】
Solution to slow compilation speed of Xcode
F.pad 的妙用
使用 trt 的int8 量化和推断 onnx 模型
AUTOSAR从入门到精通100讲(八十三)-BootLoader自我刷新
美摄助力百度“度咔剪辑”,让知识创作更容易
Systrace parsing