Go Lang使用bcrypt对用户数据加密,避免字典攻击
Go语言提供了一种较为安全的加密方式,使用GoLang golang.org/x/crypto/bcrypt 模块,通过该模块可以快速实现密码的存储处理,每次运行,计算的密码值都不同。因此使用GoLang golang.org/x/crypto/bcrypt 模块对密码进行处理,可以避免字典攻击。
1.命令行下安装 bcrypt 包:
1 | go get golang.org/x/crypto/bcrypt |
2.安装bcrypt包失败,使用代理或者直接使用Git拉取:
1 | git clone https: //github.com/golang/crypto.git |
3.bcrypt对数据加密处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package main import ( "fmt" "golang.org/x/crypto/bcrypt" ) func main() { hashpass := enPass( "admin" ) // 密码加密,返回加密后的密码 checkPwd( "admin" , hashpass) // 校验密码 } // 加密 func enPass(passWd string ) string { fmt.Println( "====模拟注册时密码加密====" ) // 1、获取用户传来的pwd,使用字节切片转换 originPwd := [] byte (passWd) // 2、调用 bcrypt.GenerateFromPassword 生成加密字符串 hashPwd, err := bcrypt.GenerateFromPassword(originPwd, bcrypt.DefaultCost) if err != nil { fmt.Println(err) } // 3、此时 hashPwd 为字节切片,实际加密字符串需使用string转换 encodePWD := string (hashPwd) // 可以将此加密串保存到数据库,可作为密码匹配验证 fmt.Println(encodePWD) return encodePWD } /* * 验证密码是否匹配 * input_pass 用户输入的密码 * data_pass 数据库中查询出的加密后的密码 */ func checkPwd(inputPass, dataPass string ) bool { fmt.Println( "====模拟登录====" ) // 1、将数据库中的加密串做字节切片转换 //byteHashPwd := []byte("$2a$10$XgJGdy.uxXPBWgw6povXNeds8JjJ9KOJiTp96MutoDus1x5nUuTOS") // 从数据库中读取到的加密后的密码数据 byteHashPwd := [] byte (dataPass) // 实际的加密字符串 // 2、调用 bcrypt.CompareHashAndPassword 证密码是否匹配 // 第一个参数为通过字节切片转换的加密的哈希串、第二个参数为字节切片转换过的用户输入密码值 err := bcrypt.CompareHashAndPassword(byteHashPwd, [] byte (inputPass)) // 没有错误则密码匹配 if err != nil { fmt.Println( "pwd wrong" , err) return false } else { fmt.Println( "pwd ok" ) return true } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律