Help us shape the future of Go! Take the 2026 Go Developer Survey

cycrypto

package
v0.2.4 Latest Latest
Warning

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

Go to latest
Published: Sep 11, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const SIGN = "" /* 128-byte string literal not displayed */

Variables

View Source
var (
	PUB_VALUE = "Cyclone890123456"
	IV        = "1234567890123456"
)

Functions

func Base64Decode

func Base64Decode(v string) string

Base64Decode 将 Base64 编码的字符串解码。

参数:

  • v: Base64 编码的字符串

返回值:

  • string: 解码后的字符串

用法:

decoded := Base64Decode("aGVsbG8gd29ybGQ=")
// decoded = "hello world"

局限:

  • 解码失败时返回空字符串(错误被忽略)
  • 输入必须是有效的 Base64 字符串

func Base64Encode

func Base64Encode(v string) string

Base64Encode 将字符串进行 Base64 编码。

参数:

  • v: 需要编码的字符串

返回值:

  • string: Base64 编码后的字符串

用法:

encoded := Base64Encode("hello world")
// encoded = "aGVsbG8gd29ybGQ="

特点:

  • 使用标准 Base64 字母表
  • 输出包含填充字符 '='

局限:

  • 编码后长度会增加约 33%
  • 不适合加密,仅用于编码

func GenHMAC

func GenHMAC(data string, key string) string

GenHMAC 生成 HMAC-SHA1 签名。

参数:

  • data: 需要签名的数据
  • key: 签名密钥

返回值:

  • string: Base64 编码的签名

用法:

signature := GenHMAC("data to sign", "secret_key")
// signature = "base64encodedhmac"

特点:

  • 使用 HMAC-SHA1 算法
  • 返回 Base64 编码
  • 自动在密钥末尾添加 &

局限:

  • SHA1 已被认为不够安全
  • 仅用于兼容性维护

func GetSignature

func GetSignature(method, key string, queryParam map[string]string) string

GetSignature 生成 API 请求的签名。

参数:

  • method: HTTP 方法(GET、POST 等)
  • key: 签名密钥
  • queryParam: 查询参数 Map

返回值:

  • string: Base64 编码的签名

用法:

params := map[string]string{"name": "John", "age": "30"}
signature := GetSignature("GET", "secret_key", params)

特点:

  • 组合 SortParam 和 GenHMAC
  • 参数自动排序
  • 支持多种 HTTP 方法

局限:

  • 使用 HMAC-SHA1(不够安全)

func GetSignatureFromURL

func GetSignatureFromURL(method, key, url string) (string, error)

GetSignatureFromURL 从 URL 生成签名。

参数:

  • method: HTTP 方法(GET、POST 等)
  • key: 签名密钥
  • url: 完整 URL(包含查询参数)

返回值:

  • string: Base64 编码的签名
  • error: 如果 URL 格式无效返回错误

用法:

url := "https://api.example.com/users?name=John&age=30"
signature, err := GetSignatureFromURL("GET", "secret_key", url)
if err != nil {
    log.Fatal(err)
}

局限:

  • URL 必须包含 ? 和查询参数
  • 不支持 URL 编码的参数

func HashInt

func HashInt(input string) uint32

HashInt 使用 Murmur3 算法计算字符串的哈希值。

参数:

  • input: 需要哈希的字符串

返回值:

  • uint32: 32 位无符号整数哈希值

用法:

hash := HashInt("test string")
// hash = 1234567890

特点:

  • 速度快
  • 分布均匀
  • 适合哈希表和布隆过滤器

局限:

  • 不适合密码存储
  • 返回值范围有限(32 位)

func JwtSign

func JwtSign(data *JwtData) (string, error)

JwtSign 签名并生成 JWT token,默认 7 天过期。

func JwtSignWithTTL

func JwtSignWithTTL(data *JwtData, ttl time.Duration) (string, error)

JwtSignWithTTL 使用自定义 TTL 签名并生成 JWT token。

func MD5

func MD5(params ...interface{}) string

MD5 计算参数的 MD5 哈希值。

参数:

  • params: 可变参数,会被转换为字符串后计算哈希

返回值:

  • string: 32 位十六进制 MD5 哈希值

用法:

hash := MD5("hello world")
// hash = "5eb63bbbe01eeed093cb22bb8f5acdc3"
hash := MD5("user", "123", "salt")

局限:

  • MD5 已被认为不安全,不应用于密码存储
  • 仅适合非安全场景(如数据完整性检查)
  • 所有参数会被转换为字符串后拼接

func Md5Concat

func Md5Concat(params ...interface{}) string

Md5Concat 模拟Java的MD5.create().digestHex()行为 将多个参数直接拼接成字符串后计算MD5

func NanoID

func NanoID(l ...int) string

NanoID 生成一个 Nano ID(短的、URL 友好的唯一 ID)。

参数:

  • l: 可选的长度参数,如果不提供则使用默认长度(21 字符)

返回值:

  • string: Nano ID 字符串

用法:

id := NanoID()           // 默认长度 21
id := NanoID(16)         // 自定义长度 16

特点:

  • 短小精悍
  • URL 友好(只使用 URL 安全字符)
  • 生成速度快
  • 可自定义长度

局限:

  • 长度越短,碰撞概率越高
  • 不可排序
  • 不包含时间戳信息

func ParseQueryToMap

func ParseQueryToMap(queryString string) (map[string]string, error)

ParseQueryToMap 将查询字符串解析为 Map。

参数:

  • queryString: 查询字符串(可选包含前导 ?)

返回值:

  • map[string]string: 参数 Map
  • error: 总是返回 nil

用法:

params, _ := ParseQueryToMap("name=John&age=30")
// params = map[string]string{"name": "John", "age": "30"}
params, _ := ParseQueryToMap("?name=John&age=30")
// 自动移除前导 ?

局限:

  • 不进行 URL 解码
  • 不支持重复参数

func ParseURLParams

func ParseURLParams(url string) (string, map[string]string, error)

ParseURLParams 解析 URL 并提取基础 URL 和参数。

参数:

  • url: 完整 URL(包含查询参数)

返回值:

  • string: 基础 URL(不包含查询参数)
  • map[string]string: 查询参数 Map
  • error: 如果 URL 格式无效返回错误

用法:

url := "https://api.example.com/users?name=John&age=30"
baseURL, params, err := ParseURLParams(url)
if err != nil {
    log.Fatal(err)
}
// baseURL = "https://api.example.com/users"
// params = map[string]string{"name": "John", "age": "30"}

局限:

  • URL 必须包含 ? 和查询参数
  • 不进行 URL 解码

func RealVal

func RealVal(encodeVal string) string

RealVal 解析 ENC(...) 格式的加密值。

参数:

  • encodeVal: 可能是 ENC(...) 格式的加密值或普通字符串

返回值:

  • string: 如果是 ENC(...) 格式则返回解密后的值,否则返回原值

用法:

value := RealVal("ENC(base64encodedciphertext)")
// value = "decrypted data"
value := RealVal("plain text")
// value = "plain text"

特点:

  • 自动识别 ENC(...) 格式
  • 不匹配格式时返回原值

局限:

  • 解密失败时返回空字符串
  • 仅支持 ENC(...) 格式

func SM4Decode2

func SM4Decode2(v string) string

SM4Decode2 使用预定义的密钥和 IV 解密 SM4 加密的数据。

参数:

  • v: Base64 编码的 SM4 加密数据

返回值:

  • string: 解密后的字符串

用法:

encrypted := "base64encodedciphertext"
decrypted := SM4Decode2(encrypted)
// decrypted = "original data"

特点:

  • 使用固定的密钥和 IV
  • 自动处理 Base64 解码

局限:

  • 使用硬编码的密钥和 IV(安全性低)
  • 解密失败时返回空字符串
  • 仅用于兼容性维护,不推荐新项目使用

func SM4Decrypt2

func SM4Decrypt2(key, iv, cipherText []byte) ([]byte, error)

func SnowflakeID

func SnowflakeID() string

SnowflakeID 生成一个 Snowflake ID(分布式系统中的唯一 ID)。

返回值:

  • string: Snowflake ID 字符串(数字形式)

用法:

id := SnowflakeID()
// id = "1234567890123456789"

特点:

  • 分布式系统友好
  • 可排序(按时间顺序)
  • 包含时间戳、机器 ID、序列号
  • 高效率(可生成百万级 ID/秒)

局限:

  • 依赖系统时间和机器 ID
  • 长度较长(19 字符)
  • 生成失败时返回空字符串
  • 需要在分布式系统中配置机器 ID

func SortParam

func SortParam(method string, params map[string]string) string

SortParam 创建规范化的参数字符串用于签名。

参数:

  • method: HTTP 方法(GET、POST 等)
  • params: 参数 Map

返回值:

  • string: 规范化的参数字符串,格式为 "METHOD&%2F&key1%3Dvalue1%26key2%3Dvalue2..."

用法:

params := map[string]string{"name": "John", "age": "30"}
sorted := SortParam("GET", params)
// sorted = "GET&%2F&age%3D30%26name%3DJohn"

特点:

  • 参数按字母顺序排序
  • 使用 RFC3986 编码
  • 自动跳过 signature 参数

局限:

  • 不支持数组参数

func UUID

func UUID() string

UUID 生成一个 RFC 4122 标准的 UUID(通用唯一标识符)。

返回值:

  • string: UUID 字符串,格式为 "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

用法:

id := UUID()
// id = "550e8400-e29b-41d4-a716-446655440000"

特点:

  • 全局唯一性强
  • 生成速度快
  • 标准格式,易于跨系统使用

局限:

  • 长度较长(36 字符)
  • 不可排序
  • 随机生成,无序列性

func XID

func XID() string

XID 生成一个 XID(全局唯一、可排序的 ID)。

返回值:

  • string: XID 字符串,长度为 20 字符

用法:

id := XID()
// id = "c0bnxqbovt8g6d4p0000"

特点:

  • 全局唯一
  • 可排序(按时间顺序)
  • 长度较短(20 字符)
  • 包含时间戳信息

局限:

  • 不如 UUID 标准化
  • 依赖系统时间

Types

type JwtClaim

type JwtClaim struct {
	Data map[string]interface{} `json:"data"`
	jwt.StandardClaims
}

type JwtData

type JwtData struct {
	Jti  string `json:"jti"`
	Sub  string `json:"sub"`
	Auth string `json:"auth"`
	Exp  int64  `json:"exp"`
}

func GetJwtVal

func GetJwtVal(token string) (*JwtData, error)

GetJwtVal 解析 JWT token 并提取数据。

Jump to

Keyboard shortcuts

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