当前位置: 代码网 > it编程>前端脚本>Golang > Golang使用bcrypt实现密码加密和校验的操作代码

Golang使用bcrypt实现密码加密和校验的操作代码

2024年06月13日 Golang 我要评论
bcrypt可以用于数据库中的用户密码保存,相比md5而言更加的安全可靠文档https://pkg.go.dev/golang.org/x/crypto/bcrypt文档上给出了标准文档,这个库是下面

bcrypt可以用于数据库中的用户密码保存,相比md5而言更加的安全可靠

文档

https://pkg.go.dev/golang.org/x/crypto/bcrypt

文档上给出了标准文档,这个库是下面这个文件描述的算法golang实现:

https://www.usenix.org/legacy/event/usenix99/provos/provos.pdf

安装

go get -u golang.org/x/crypto/bcrypt

加密示例

package main
import (
    "fmt"
    "golang.org/x/crypto/bcrypt"
)
func main() {
    password := "123456"
    hashedpassword, _ := bcrypt.generatefrompassword([]byte(password), bcrypt.defaultcost)
    fmt.println(string(hashedpassword))
    // $2a$10$evdbpymvp7udfi0tfrd6ro3yxlwqwuvykmdqbwfloyctynxhcmbd2
    // $2a$10$6jdh6z7djljodo4volphbeigzqhwhuvf1jrj/h7ibf/pjgtx.wzgg
}

可以看到,多次运行后,生成的结果是不一样的

bcrypt不能解密,不过可以比较加密后的数据和加密前的数据是否相匹配

package main
import (
    "fmt"
    "golang.org/x/crypto/bcrypt"
)
func main() {
    password := "123456"
    hashedpassword := "$2a$10$evdbpymvp7udfi0tfrd6ro3yxlwqwuvykmdqbwfloyctynxhcmbd2"
    err := bcrypt.comparehashandpassword([]byte(hashedpassword), []byte(password))
    fmt.println(err)
    // <nil>
}

由于算法的入参和出参都是字节类型的数据,为了便于使用,可以将两个方法简单封装成一个工具类,将入参和出参都改为是字符串类型的数据

package utils
import (
    "golang.org/x/crypto/bcrypt"
)
func generatefrompassword(password string) (string, error) {
    hashedpassword, err := bcrypt.generatefrompassword([]byte(password), bcrypt.defaultcost)
    if err != nil {
        return "", err
    }
    return string(hashedpassword), err
}
func comparehashandpassword(hashpassword string, password string) bool {
    err := bcrypt.comparehashandpassword([]byte(hashpassword), []byte(password))
    return err == nil
}

到此这篇关于golang使用bcrypt实现密码加密和校验的文章就介绍到这了,更多相关golang密码加密和校验内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com