完成全部后端和管理系统
This commit is contained in:
69
server/util/test/authmain.go
Normal file
69
server/util/test/authmain.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
// EncryptPassword 对明文密码进行 bcrypt 加密
|
||||
// 输入:明文密码(string)
|
||||
// 返回:加密后的哈希字符串(string)和可能的错误(error)
|
||||
func EncryptPassword(plainPassword string) (string, error) {
|
||||
passwordBytes := []byte(plainPassword)
|
||||
// cost=12,生产环境推荐值
|
||||
hashBytes, err := bcrypt.GenerateFromPassword(passwordBytes, 12)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(hashBytes), nil
|
||||
}
|
||||
|
||||
// VerifyPassword 验证明文密码与哈希密码是否匹配(核心:替代“解密”)
|
||||
// 输入:明文密码(用户登录时输入)、数据库存储的哈希密码
|
||||
// 返回:是否匹配(bool)、错误(error)
|
||||
func VerifyPassword(plainPassword, hashedPassword string) (bool, error) {
|
||||
// 1. 转换为字节切片
|
||||
plainBytes := []byte(plainPassword)
|
||||
hashedBytes := []byte(hashedPassword)
|
||||
|
||||
// 2. 核心验证:bcrypt 自动提取哈希中的盐值,用同样算法加密明文后比对
|
||||
// 注意:这里返回的 error 是“验证失败”或“算法异常”,不是解密错误
|
||||
err := bcrypt.CompareHashAndPassword(hashedBytes, plainBytes)
|
||||
if err == nil {
|
||||
return true, nil // 匹配成功(密码正确)
|
||||
} else if err == bcrypt.ErrMismatchedHashAndPassword {
|
||||
return false, nil // 匹配失败(密码错误)
|
||||
} else {
|
||||
return false, err // 其他异常(如哈希格式错误、内存不足等)
|
||||
}
|
||||
}
|
||||
|
||||
// 示例使用
|
||||
func main() {
|
||||
// 明文密码
|
||||
plainPwd := "admin"
|
||||
|
||||
// 加密
|
||||
hashedPwd, err := EncryptPassword(plainPwd)
|
||||
if err != nil {
|
||||
log.Fatalf("密码加密失败: %v", err)
|
||||
}
|
||||
|
||||
// 输出加密结果(可存储到数据库的 password 字段)
|
||||
log.Printf("明文密码: %s\n加密后: %s", plainPwd, hashedPwd)
|
||||
|
||||
loginInputPwd := "admin" // 用户登录时输入的明文(正确)
|
||||
// loginInputPwd := "wrong123" // 错误密码(测试用)
|
||||
|
||||
match, err := VerifyPassword(loginInputPwd, hashedPwd)
|
||||
if err != nil {
|
||||
log.Fatalf("验证异常: %v", err)
|
||||
}
|
||||
|
||||
if match {
|
||||
log.Println("验证成功!密码正确")
|
||||
} else {
|
||||
log.Println("验证失败!密码错误")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user