Files
Yunling Zhang 78673558c8 feat(core): Go 模块与账号、认证、用量基础包
- account: accounts.json 原子读写、常量时间口令校验、增删改查与用户名校验
- auth: HMAC 会话签名 + 管理员 bcrypt 凭据初始化
- randstr: 口令生成;usage: 目录用量统计
- 单测覆盖口令对错、账号禁用、只读、路径逃逸、持久化与 0600 权限
2026-09-28 16:52:33 +08:00

26 lines
636 B
Go

// Package randstr 生成不依赖第三方库的随机字符串。
package randstr
import (
"crypto/rand"
"math/big"
)
// 去掉了容易混淆的 0/O/1/l/I。
const charset = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
// Generate 返回 n 个字符的随机口令。
func Generate(n int) (string, error) {
buf := make([]byte, n)
max := big.NewInt(int64(len(charset)))
for i := range buf {
// 每个字符独立取一个均匀随机的下标,避免取模偏置。
idx, err := rand.Int(rand.Reader, max)
if err != nil {
return "", err
}
buf[i] = charset[idx.Int64()]
}
return string(buf), nil
}