package crypto import ( "crypto/rand" "encoding/hex" "io" mathrand "math/rand" "strconv" "time" ) // 生成AES-128密钥的函数,符合市面规范 func GenerateSecretKey() (string, error) { key := make([]byte, 16) // 16字节密钥 _, err := io.ReadFull(rand.Reader, key) if err != nil { return "", err } return hex.EncodeToString(key), nil } func GenerateSecretId() (string, error) { // 创建一个字节数组,用于存储随机数据 bytes := make([]byte, 8) // 因为每个字节表示两个16进制字符 // 读取随机字节到数组中 _, err := rand.Read(bytes) if err != nil { return "", err } // 将字节数组转换为16进制字符串 return hex.EncodeToString(bytes), nil } // GenerateTransactionID 生成16位数的交易单号 func GenerateTransactionID() string { length := 16 // 获取当前时间戳 timestamp := time.Now().UnixNano() // 转换为字符串 timeStr := strconv.FormatInt(timestamp, 10) // 生成随机数 mathrand.Seed(time.Now().UnixNano()) randomPart := strconv.Itoa(mathrand.Intn(1000000)) // 组合时间戳和随机数 combined := timeStr + randomPart // 如果长度超出指定值,则截断;如果不够,则填充随机字符 if len(combined) >= length { return combined[:length] } // 如果长度不够,填充0 for len(combined) < length { combined += strconv.Itoa(mathrand.Intn(10)) // 填充随机数 } return combined }