Golang Go语言中 beego 如何把密码加密后存储
Golang Go语言中 beego 如何把密码加密后存储
大佬们好,正在学 golang,打算用 beego 开发一个简单的小网站练手,但是在用户登录功能处犯了难 用户表设计如下图…
这样存储密码,在数据库中是明文的,感觉酱紫不是很好,请问 beego 有没有现成的库可以在数据库中密文存储密码的,或者大佬们可以给个思路,让我密文存储后,还可以让用户进行常规登录。
我目前能想到的就是密码先 md5 一下再存储到数据库,用户登录的时候再把用户 post 过来的给 md5 一下去与数据库中的比对,如果一样,就代表正确,但是总感觉我个菜鸟想出的方法不好,还有就是 md5 好像不太安全,网上免费暴力破解 md5 的网站太多了,求教有没有什么办法更安全,避免很容易就被破解之类的高端手法~
先谢过各位 go 前辈~ 坐等回复
更多关于Golang Go语言中 beego 如何把密码加密后存储的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
试试 bcrypt 这个库?
bcrypt.GenerateFromPassword
bcrypt.CompareHashAndPassword
ps:发不了链接🙄
更多关于Golang Go语言中 beego 如何把密码加密后存储的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
用 bcrypt
单纯用摘要确实很容易破解
有专门逆向摘要的网站,提供摘要和算法,简单的摘要都能逆向出来。其逆向机制也很简单,把所有简单密码的摘要存起来,然后去查……
我的解决办法是这样的:
既然密码简单,那就让它变复杂
将密码加上一些固定的参数,加上特殊符号,再计算摘要,摘要值长度一样,但不怕脱裤了!
比如下面的 userid:password@orgid
如果 id 是 uuid 更好
最后劝楼主早日醒悟
web 框架绝对不能解决你的所有问题
既然你选择了 go,就该扔掉 mvc 框架
在Go语言中,使用Beego框架进行Web开发时,为了安全存储用户密码,通常会采用哈希加密而不是简单的加密。哈希加密是一种单向函数,可以将密码转换为固定长度的字符串,而且很难从哈希值反向推导出原始密码。
以下是使用Beego框架存储加密密码的基本步骤:
-
选择哈希算法:常用的哈希算法包括bcrypt、scrypt和Argon2等。其中,bcrypt因其实现简单且安全性较高而广泛使用。
-
安装加密库:使用Go语言的
golang.org/x/crypto/bcrypt
库进行bcrypt哈希加密。可以通过go get golang.org/x/crypto/bcrypt
命令安装该库。 -
加密密码:在用户注册或修改密码时,使用bcrypt对密码进行哈希加密。
-
存储哈希值:将加密后的哈希值存储在数据库中,而不是原始密码。
-
验证密码:在用户登录时,将输入的密码再次进行哈希加密,并与数据库中存储的哈希值进行比较。如果匹配,则验证成功。
示例代码:
import (
"golang.org/x/crypto/bcrypt"
"fmt"
)
func HashPassword(password string) (string, error) {
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
return string(hashedPassword), err
}
func CheckPassword(hashedPassword, password string) bool {
err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password))
return err == nil
}
这样,你就可以在Beego应用中安全地存储和验证用户密码了。