bytes

package
v0.0.16 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 28, 2026 License: MIT Imports: 3 Imported by: 0

README

bytes

简介

bytes 包提供了字节操作相关的工具函数,专注于安全的随机字节生成功能。该包主要用于需要加密安全的随机数据的场景,如生成密码学中的nonce、salt值、会话令牌等。

主要特性
  • 提供加密安全的随机字节生成
  • 基于 Go 标准库 crypto/rand 实现高安全性
  • 简洁易用的 API 设计
  • 适用于各种安全场景(如生成nonce、salt、会话令牌等)
  • 完善的错误处理
设计理念

bytes 包遵循"简单易用但安全可靠"的设计理念,通过封装 Go 标准库中的 crypto/rand 包,提供简洁直观的 API,同时确保生成的随机数据符合加密安全标准。该包采用了单一职责原则,专注于提供高质量的随机字节生成功能,使开发者能够轻松地在安全敏感应用中实现随机数需求。

安装

前置条件
  • Go 版本要求:Go 1.16+
  • 依赖要求:无外部依赖,仅使用 Go 标准库
安装命令
go get -u github.com/fsyyft-go/kit/bytes

快速开始

基础用法
package main

import (
    "encoding/hex"
    "fmt"
    
    "github.com/fsyyft-go/kit/bytes"
)

func main() {
    // 生成16字节的随机数据
    nonce, err := bytes.GenerateNonce(16)
    if err != nil {
        panic(err)
    }
    
    // 输出十六进制表示
    fmt.Printf("生成的随机字节: %s\n", hex.EncodeToString(nonce))
}

详细指南

核心概念

bytes 包主要处理加密安全的随机字节生成。与普通的伪随机数生成器不同,加密安全的随机数生成器生成的数据具有足够的随机性和不可预测性,适用于密码学和安全敏感场景。该包使用 Go 标准库中的 crypto/rand 包作为随机源,提供高质量的随机数据。

常见用例
1. 生成密码学中的 Nonce (Number used once)
// 生成用于加密操作的16字节nonce
nonce, err := bytes.GenerateNonce(16)
if err != nil {
    // 处理错误
    return
}

// 使用nonce进行加密操作
// ...
2. 生成密码哈希的盐值
// 生成32字节的盐值
salt, err := bytes.GenerateNonce(32)
if err != nil {
    // 处理错误
    return
}

// 使用盐值进行密码哈希
// ...
最佳实践
  • 始终检查 GenerateNonce 返回的错误值
  • 对于安全敏感场景,使用足够长度的随机字节(通常16字节以上)
  • 避免在性能关键路径上频繁调用随机生成函数
  • 如需大量随机数据,考虑一次生成较长数据然后分段使用
  • 不要使用该包生成的随机数据作为加密密钥,应使用专门的密钥生成方法

API 文档

主要类型

bytes 包不定义特殊类型,直接使用 Go 标准库中的 []byte 作为数据容器。

关键函数
GenerateNonce

生成指定长度的加密安全随机字节切片。

func GenerateNonce(length int) ([]byte, error)

参数:

  • length:指定生成随机字节的长度(字节数)

返回:

  • []byte:生成的随机字节切片
  • error:如果生成过程中出现错误,则返回相应的错误

示例:

// 生成32字节的随机数据
token, err := bytes.GenerateNonce(32)
if err != nil {
    // 处理错误
}
错误处理

bytes 包中的函数会在以下情况返回错误:

  1. 当传入负数长度参数时,GenerateNonce 会返回格式为 "长度不能为负数:%d" 的错误
  2. 当系统熵不足或随机数生成器出现问题时,会返回底层 io.ReadFull 和 crypto/rand 包产生的错误

建议始终检查返回的错误值,特别是在安全敏感应用中。

性能指标

操作 性能指标 说明
生成16字节随机数 ~1-10μs 具体性能取决于系统熵和硬件
生成32字节随机数 ~2-15μs 具体性能取决于系统熵和硬件
生成64字节随机数 ~3-30μs 具体性能取决于系统熵和硬件

测试覆盖率

覆盖率
bytes 100%

完整的测试覆盖了所有正常场景、边界场景和错误处理场景,确保了包的稳定性和可靠性。

调试指南

常见问题排查
随机数生成失败

问题:GenerateNonce 函数返回错误

解决:

  • 检查系统熵池是否充足
  • 确认应用有适当的权限访问 /dev/urandom 或 /dev/random(在Linux/Unix系统中)
  • 在虚拟环境中,确保虚拟机配置允许访问随机数生成器
性能问题

问题:随机数生成速度慢,影响应用性能

解决:

  • 减少高频调用,考虑缓存或批量生成随机数
  • 检查系统负载和资源使用情况
  • 考虑是否确实需要加密安全的随机数,对于非安全场景可使用 math/rand 替代

相关文档

贡献指南

我们欢迎任何形式的贡献,包括但不限于:

  • 报告问题
  • 提交功能建议
  • 提交代码改进
  • 完善文档

请参考我们的贡献指南了解详细信息。

许可证

本项目采用 MIT License 许可证。查看 LICENSE 文件了解更多信息。

Documentation

Overview

Package bytes 提供基于 crypto/rand 的随机字节生成工具。

本包面向需要密码学安全随机原始字节的场景,例如 nonce、IV、salt 或 token 原始材料生成。GenerateNonce 会按请求长度读取随机源;长度合法性、随机源错误、 协议要求的唯一性、重放防护和结果编码由调用方在使用处处理。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenerateNonce

func GenerateNonce(length int) ([]byte, error)

GenerateNonce 返回指定长度的密码学安全随机字节切片。

length 必须大于等于 0。返回值可用作 nonce、IV、salt 或 token 的原始随机材料; 上层协议要求的唯一性、长度、重放防护和编码格式由调用方保证。

参数:

  • length: 指定生成随机字节的长度,必须大于等于 0;为 0 时返回非 nil 的空切片。

返回:

  • []byte: length 为负数时返回 nil;否则返回长度为 length 的缓冲区。若随机源读取失败, 该缓冲区可能只包含部分已读取随机字节,调用方不应在 err 非 nil 时继续将其作为完整随机值使用。
  • error: length 为负数时返回参数错误;底层随机源失败或短读时返回 io.ReadFull 产生的错误, 例如 io.ErrUnexpectedEOF 或随机源自身错误。

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL