工具库高级功能
密码加密、哈希计算与安全密钥生成
工具库高级功能
Bamboo Base 提供了密码加密、哈希计算和安全密钥生成等高级工具函数。
密码加密
基于 bcrypt 的密码加密,额外增加 Base64 编码层。
加密流程
明文密码 → Base64 编码 → bcrypt 哈希 → 密文函数列表
// 加密密码(返回字节切片)
func EncryptPassword(pass string) ([]byte, error)
// 加密密码(返回字节切片,panic on error)
func MustEncryptPassword(pass string) []byte
// 加密密码(返回字符串)
func EncryptPasswordString(pass string) (string, error)
// 加密密码(返回字符串,panic on error)
func MustEncryptPasswordString(pass string) string
// 验证密码
func VerifyPassword(inputPass, hashPass string) error
// 验证密码(返回布尔值)
func IsPasswordValid(inputPass, hashPass string) bool使用示例
import xUtil "github.com/bamboo-services/bamboo-base-go/utility"
// 注册时加密密码
hash, err := xUtil.EncryptPasswordString("userPassword123")
if err != nil {
log.Fatal(err)
}
// 存储 hash 到数据库
// 登录时验证密码
if xUtil.IsPasswordValid(inputPassword, storedHash) {
// 密码正确,登录成功
} else {
// 密码错误
}完整注册登录示例
type User struct {
ID int64 `gorm:"primaryKey"`
Username string `gorm:"uniqueIndex"`
Password string
}
// 注册
func Register(username, password string) error {
hash := xUtil.MustEncryptPasswordString(password)
user := User{
Username: username,
Password: hash,
}
return db.Create(&user).Error
}
// 登录
func Login(username, password string) (*User, error) {
var user User
if err := db.Where("username = ?", username).First(&user).Error; err != nil {
return nil, err
}
if !xUtil.IsPasswordValid(password, user.Password) {
return nil, errors.New("密码错误")
}
return &user, nil
}哈希计算
SHA-256
// 字符串 SHA-256 哈希
func Hash(data string) string
// 字节切片 SHA-256 哈希
func HashBytes(data []byte) string返回值:64 位小写十六进制字符串
xUtil.Hash("hello")
// "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"MD5
// 字符串 MD5 哈希
func MD5Hash(str string) string
// 字节切片 MD5 哈希
func MD5HashBytes(data []byte) string返回值:32 位小写十六进制字符串
xUtil.MD5Hash("hello")
// "5d41402abc4b2a76b9719d911017c592"使用场景
// 文件完整性校验
fileHash := xUtil.HashBytes(fileContent)
// 缓存键生成
cacheKey := "user:" + xUtil.MD5Hash(userID)
// 签名计算
signature := xUtil.Hash(data + secret)安全密钥生成
长密钥
生成 67 字符的安全密钥(cs_ + 64 位十六进制):
func GenerateLongSecurityKey() string格式:cs_ + 两个 UUID 拼接(去除连字符)
xUtil.GenerateLongSecurityKey()
// "cs_550e8400e29b41d4a716446655440000123e4567e89b12d3a456426614174000"短密钥
生成 35 字符的安全密钥(cs_ + 32 位十六进制):
func GenerateSecurityKey() string格式:cs_ + 单个 UUID(去除连字符)
xUtil.GenerateSecurityKey()
// "cs_550e8400e29b41d4a716446655440000"密钥验证
验证字符串是否为有效的安全密钥格式:
func VerifySecurityKey(input string) bool验证规则:
- 以
cs_开头 - 后跟 64 或 32 个十六进制字符
xUtil.VerifySecurityKey("cs_550e8400e29b41d4a716446655440000") // true
xUtil.VerifySecurityKey("invalid_key") // false使用场景
// API 密钥生成
apiKey := xUtil.GenerateLongSecurityKey()
// 会话令牌
sessionToken := xUtil.GenerateSecurityKey()
// 验证 API 密钥格式
if !xUtil.VerifySecurityKey(apiKey) {
return errors.New("无效的 API 密钥格式")
}完整示例
package main
import (
"fmt"
xUtil "github.com/bamboo-services/bamboo-base-go/utility"
)
func main() {
// 密码加密
password := "mySecurePassword123"
hash := xUtil.MustEncryptPasswordString(password)
fmt.Println("密码哈希:", hash)
// 密码验证
if xUtil.IsPasswordValid(password, hash) {
fmt.Println("密码验证成功")
}
// 哈希计算
data := "important data"
sha256Hash := xUtil.Hash(data)
md5Hash := xUtil.MD5Hash(data)
fmt.Println("SHA-256:", sha256Hash)
fmt.Println("MD5:", md5Hash)
// 安全密钥
longKey := xUtil.GenerateLongSecurityKey()
shortKey := xUtil.GenerateSecurityKey()
fmt.Println("长密钥:", longKey)
fmt.Println("短密钥:", shortKey)
// 验证密钥
fmt.Println("长密钥有效:", xUtil.VerifySecurityKey(longKey))
fmt.Println("短密钥有效:", xUtil.VerifySecurityKey(shortKey))
}安全建议
- 密码存储:始终使用
EncryptPassword加密后存储,永不存储明文 - 密钥保护:生成的安全密钥应安全存储,避免泄露
- MD5 限制:MD5 不应用于安全敏感场景,仅用于校验和缓存键
- SHA-256 优先:安全相关的哈希计算优先使用 SHA-256