Golang将密码盐加密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Golang将密码盐加密

代码地址:https://gitcode.net/m0_51510236/go_password

首先我们来初始化一个项目

go mod init go_password

golang密码加密我们可以使用 golang.org/x/crypto/bcrypt 包:

go get "golang.org/x/crypto/bcrypt"

然后我们可以在 utils 包中编写一个 password.go 文件,用于密码加密,代码如下:

package utils
import "golang.org/x/crypto/bcrypt"
// EncryptPassword 将密码加密,需要传入密码返回的是加密后的密码
func EncryptPassword(password string) (string, error) {
  // 加密密码,使用 bcrypt 包当中的 GenerateFromPassword 方法,bcrypt.DefaultCost 代表使用默认加密成本
  encryptPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
  if err != nil {
    // 如果有错误则返回异常,加密后的空字符串返回为空字符串,因为加密失败
    return "", err
  } else {
    // 返回加密后的密码和空异常
    return string(encryptPassword), nil
  }
}
// EqualsPassword 对比密码是否正确
func EqualsPassword(password, encryptPassword string) bool {
  // 使用 bcrypt 当中的 CompareHashAndPassword 对比密码是否正确,第一个参数为加密后的密码,第二个参数为未加密的密码
  err := bcrypt.CompareHashAndPassword([]byte(encryptPassword), []byte(password))
  // 对比密码是否正确会返回一个异常,按照官方的说法是只要异常是 nil 就证明密码正确
  return err == nil
}

然后我们编写一个程序执行一下这个加密代码:

package main
import (
   "fmt"
   "go_password/utils"
)
// 程序的主入口,用于测试密码加密和对比加密后的字符串
func main() {
   // 定义密码
   password := "123456"
   // 尝试第一次加密密码
   encrypt1, _ := utils.EncryptPassword(password)
   // 打印第一次加密的密码
   fmt.Printf("第一次加密密码:%v\n", encrypt1)
   // 尝试第二次加密密码
   encrypt2, _ := utils.EncryptPassword(password)
   // 打印第二次加密的密码
   fmt.Printf("第一次加密密码:%v\n", encrypt2) // 可以发现两次加密密码是不一样的结果
   // 对比密码是否正确,第一次加密的字符串加密对比
   passwordEquals := utils.EqualsPassword(password, encrypt1)
   fmt.Printf("使用第一次加密的密码字符串对比密码是否正确:%v\n", passwordEquals)
   // 对比密码是否正确,第二次加密的字符串加密对比
   passwordEquals = utils.EqualsPassword(password, encrypt2)
   fmt.Printf("使用第二次加密的密码字符串对比密码是否正确:%v\n", passwordEquals)
   // 尝试对比一个错误的密码
   passwordEquals = utils.EqualsPassword("1234567", encrypt1) // 1234567 是错误的密码
   fmt.Printf("尝试用错误的密码对比密码是否正确:%v\n", passwordEquals)
}

运行这个 main 方法,我们可以查看结果:

我们可以看到两次密码加密的结果是不一样的,因为对密码加密的时候添加了盐。这种密码加密是非常安全且不可逆的,可以放心使用,并且我们对比密码是否正确也返回了正确的结果,可以用这个方法去写一个注册登陆的功能了!

相关文章
|
4月前
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
4月前
|
JSON Go 网络安全
golang使用JWX进行认证和加密
golang使用JWX进行认证和加密
60 5
|
2月前
|
存储 Java 数据库
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类
这篇文章介绍了如何在Java中通过加盐和加密算法(如MD5和SHA)安全地存储密码,并提供了一个密码工具类PasswordUtils和密码编码类PasswordEncoder的实现示例。
34 10
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类
|
2月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
31 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
7月前
|
NoSQL 测试技术 Go
【Golang】国密SM2公钥私钥序列化到redis中并加密解密实战_sm2反编(1)
【Golang】国密SM2公钥私钥序列化到redis中并加密解密实战_sm2反编(1)
|
2月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
152 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
7月前
|
算法 数据库 数据安全/隐私保护
rsa加密解密,使用rsa对密码加密
rsa加密解密,使用rsa对密码加密
|
3月前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
134 5
|
3月前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
50 2
|
4月前
|
安全 数据安全/隐私保护 Python