zencrypt

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Mar 28, 2026 License: MIT Imports: 29 Imported by: 0

Documentation

Overview

Package zencrypt Package enctypt 提供各种加密算法实现

AES-CBC加密示例(传统模式):

cipher := enctypt.NewAesEncrypt("your-secret-key")

// 加密
encrypted, err := cipher.Encrypt([]byte("secret data"))
if err != nil {
    log.Fatal(err)
}

// 解密
decrypted, err := cipher.Decrypt(encrypted)
if err != nil {
    log.Fatal(err)
}

AES-GCM加密示例(推荐,现代标准):

cipher := enctypt.NewAesGcmEncrypt("your-secret-key")

// 加密(自动提供完整性校验)
encrypted, err := cipher.Encrypt([]byte("secret data"))
if err != nil {
    log.Fatal(err)
}

// 解密(自动验证完整性)
decrypted, err := cipher.Decrypt(encrypted)
if err != nil {
    log.Fatal(err)  // 如果数据被篡改,这里会报错
}

注意事项:

  • 密钥会通过SHA256派生为32字节
  • CBC模式:IV随机生成并附加在密文前16字节,使用PKCS7填充
  • GCM模式:Nonce随机生成并附加在密文前12字节,自带认证标签,无需填充
  • 推荐使用GCM模式(更安全,更快,防篡改)

Package zencrypt Package encrypt 提供RSA加密和签名工具。

安全建议

对于加密,请使用OAEP模式(EncryptOAEP/DecryptOAEP)而不是PKCS1v15。 PKCS1v15已被弃用,因为容易受到选择密文攻击。

使用示例

基础加密(推荐 - OAEP):

privKey, _ := encrypt.GenerateSecretKey()
pubKey := &privKey.PublicKey
ciphertext, _ := encrypt.EncryptOAEP(pubKey, plaintext)
decrypted, _ := encrypt.DecryptOAEP(privKey, ciphertext)

带Label的加密(防重放):

label := []byte("user:12345")  // 绑定到特定用户
ciphertext, _ := encrypt.EncryptOAEPWithLabel(pubKey, plaintext, label)
decrypted, _ := encrypt.DecryptOAEPWithLabel(privKey, ciphertext, label)

自定义哈希函数(大密钥):

// ⚠️ 每次调用必须创建新的Hash实例,不能复用
ciphertext, _ := encrypt.EncryptOAEPWithHash(pubKey, sha512.New(), plaintext)
decrypted, _ := encrypt.DecryptOAEPWithHash(privKey, sha512.New(), ciphertext)

数字签名:

privKey, _ := encrypt.GenerateSecretKey()
signature, _ := encrypt.Sign(privKey, data)
err := encrypt.Verify(&privKey.PublicKey, data, signature)

Package zencrypt Package encrypt 提供SM2国密非对称加密和签名实现。

SM2是中国国家密码管理局发布的椭圆曲线公钥密码算法标准(GM/T 0003-2012), 基于256位素数域椭圆曲线,安全强度等同于ECC P-256。

加密示例:

privKey, _ := encrypt.GenerateSM2Key()
pubKey := privKey.PublicKey()

ciphertext, _ := encrypt.SM2Encrypt(pubKey, []byte("secret data"))
plaintext, _ := encrypt.SM2Decrypt(privKey, ciphertext)

签名示例:

privKey, _ := encrypt.GenerateSM2Key()
signature, _ := encrypt.SM2Sign(privKey, []byte("data"))
err := encrypt.SM2Verify(privKey.PublicKey(), []byte("data"), signature)

密钥PEM序列化:

privPem := encrypt.SM2MarshalPrivateKey(privKey)
pubPem := encrypt.SM2MarshalPublicKey(privKey.PublicKey())

privKey2, _ := encrypt.SM2ParsePrivateKey(privPem)
pubKey2, _ := encrypt.SM2ParsePublicKey(pubPem)

Package encrypt 提供SM3国密哈希实现。

SM3是中国国家密码管理局发布的密码杂凑算法标准(GM/T 0004-2012), 输出256位(32字节)摘要,安全强度等同于SHA-256。

示例:

hash := encrypt.SM3("my-data")
// hash 为32字节摘要

hashHex := encrypt.SM3Hex("my-data")
// hashHex 为64字符十六进制字符串

hashBytes := encrypt.SM3Bytes([]byte("my-data"))
// 直接对字节切片计算哈希

Package zencrypt Package encrypt 提供基于 SM3 的密码哈希实现(信创默认)。

使用 SM3-HMAC + 随机 salt + 多轮迭代,安全强度等同于 PBKDF2-SHA256。 符合 GM/T 0004-2012 标准。

示例:

hasher := encrypt.NewSM3Password()

hash, _ := hasher.Encrypt("my-password")
ok := hasher.CompareHashAndPassword("my-password", hash) // true
ok = hasher.CompareHashAndPassword("wrong", hash)        // false

与 Argon2/Bcrypt 接口一致,可直接替换。

Package zencrypt Package encrypt 提供SM4国密对称加密实现。

SM4-GCM加密示例(推荐):

cipher := encrypt.NewSM4GcmEncrypt("your-secret-key")

encrypted, err := cipher.Encrypt([]byte("secret data"))
if err != nil {
    log.Fatal(err)
}

decrypted, err := cipher.Decrypt(encrypted)
if err != nil {
    log.Fatal(err)
}

SM4-CBC加密示例:

cipher := encrypt.NewSM4Encrypt("your-secret-key")

encrypted, err := cipher.Encrypt([]byte("secret data"))
if err != nil {
    log.Fatal(err)
}

decrypted, err := cipher.Decrypt(encrypted)
if err != nil {
    log.Fatal(err)
}

注意事项:

  • 密钥通过SM3派生为16字节(SM4密钥长度固定128位)
  • CBC模式:IV随机生成并附加在密文前16字节,使用PKCS7填充
  • GCM模式:Nonce随机生成并附加在密文前12字节,自带认证标签,无需填充
  • 推荐使用GCM模式(更安全,更快,防篡改)
  • 符合 GM/T 0002-2012 标准
Example (PoolUsage)

Example_poolUsage 展示池的使用示例

cipher := NewAesEncrypt("test-key")
plaintext := []byte("Hello, World!")

// 加密
encrypted, _ := cipher.Encrypt(plaintext)

// 解密
decrypted, _ := cipher.Decrypt(encrypted)

fmt.Println(string(decrypted))
Output:
Hello, World!

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckAESNI

func CheckAESNI() bool

CheckAESNI 检查是否启用了 AES-NI 硬件加速 Go 的 crypto/aes 会自动检测并使用 AES-NI(如果 CPU 支持)

func DecodeString

func DecodeString(key string) ([]byte, error)

func DecryptOAEP

func DecryptOAEP(privKey *rsa.PrivateKey, ciphertext []byte) ([]byte, error)

DecryptOAEP 解密使用RSA-OAEP和SHA-256加密的数据。

如果解密失败或密文无效会返回错误。

func DecryptOAEPWithHash

func DecryptOAEPWithHash(privKey *rsa.PrivateKey, hash hash.Hash, ciphertext []byte) ([]byte, error)

DecryptOAEPWithHash 使用RSA-OAEP和自定义哈希函数解密数据。

哈希函数必须与加密时使用的相同。

并发安全警告

hash参数必须是一个新创建的Hash实例,不能在多个goroutine间共享。 hash.Hash是有状态的且非线程安全。

正确用法:

// ✅ 每次调用创建新实例
plaintext, _ := DecryptOAEPWithHash(privKey, sha512.New(), ciphertext)

func DecryptOAEPWithLabel

func DecryptOAEPWithLabel(privKey *rsa.PrivateKey, ciphertext []byte, label []byte) ([]byte, error)

DecryptOAEPWithLabel 使用RSA-OAEP、SHA-256和自定义Label解密数据。

Label必须与加密时使用的完全相同,否则解密失败。

示例:

label := []byte("user:12345")
plaintext, _ := DecryptOAEPWithLabel(privKey, ciphertext, label)

func EncodeToString

func EncodeToString(data []byte) string

func EncryptOAEP

func EncryptOAEP(pubKey *rsa.PublicKey, plaintext []byte) ([]byte, error)

EncryptOAEP 使用RSA-OAEP和SHA-256加密数据。

OAEP(最优非对称加密填充)是推荐的RSA加密填充方案。 它提供语义安全性,并能抵抗选择密文攻击。

最大明文大小 = (密钥大小/8) - 2*哈希大小 - 2 对于2048位密钥配合SHA-256:最大明文 = 190字节

如果明文超过密钥大小限制会返回错误。

func EncryptOAEPWithHash

func EncryptOAEPWithHash(pubKey *rsa.PublicKey, hash hash.Hash, plaintext []byte) ([]byte, error)

EncryptOAEPWithHash 使用RSA-OAEP和自定义哈希函数加密数据。

允许使用不同的哈希函数(例如,大密钥可以使用SHA-512)。 解密时必须使用相同的哈希函数。

并发安全警告

hash参数必须是一个新创建的Hash实例,不能在多个goroutine间共享。 hash.Hash是有状态的且非线程安全。

正确用法:

// ✅ 每次调用创建新实例
ciphertext, _ := EncryptOAEPWithHash(pubKey, sha512.New(), plaintext)

错误用法:

// ❌ 不要复用Hash实例
h := sha512.New()
ciphertext1, _ := EncryptOAEPWithHash(pubKey, h, plaintext1)  // 第一次使用
ciphertext2, _ := EncryptOAEPWithHash(pubKey, h, plaintext2)  // ❌ h已被污染

func EncryptOAEPWithLabel

func EncryptOAEPWithLabel(pubKey *rsa.PublicKey, plaintext []byte, label []byte) ([]byte, error)

EncryptOAEPWithLabel 使用RSA-OAEP、SHA-256和自定义Label加密数据。

Label(也称为关联数据)是一个可选的公开字节序列,用于将密文绑定到特定上下文。 Label不保密,但会参与密文生成,防止密文在不同上下文间的重放攻击。

典型用途:

  • 将密文绑定到用户ID、会话ID等
  • 防止跨协议或跨应用的密文重放
  • 实现domain separation

解密时必须提供相同的Label,否则解密失败。

示例:

// 加密时绑定用户ID
label := []byte("user:12345")
ciphertext, _ := EncryptOAEPWithLabel(pubKey, plaintext, label)

// 解密时必须提供相同Label
plaintext, _ := DecryptOAEPWithLabel(privKey, ciphertext, label)

大多数简单场景可以传nil作为label(等同于EncryptOAEP)。

func FnvHash

func FnvHash(s string) (uint32, error)

func GenerateSecretKey

func GenerateSecretKey() (*rsa.PrivateKey, error)

GenerateSecretKey 生成一个新的2048位RSA私钥。

对于更高的安全要求,建议使用3072或4096位。

func GenerateSecretKeyWithBits

func GenerateSecretKeyWithBits(bits int) (*rsa.PrivateKey, error)

GenerateSecretKeyWithBits 生成指定位数的RSA私钥。

常用大小:2048(标准)、3072(高安全)、4096(非常高安全)。

func GetCryptoInfo

func GetCryptoInfo() string

GetCryptoInfo 获取当前加密实现信息

func SM2Decrypt

func SM2Decrypt(privKey *SM2PrivateKey, ciphertext []byte) ([]byte, error)

SM2Decrypt 使用SM2私钥解密数据。

func SM2Encrypt

func SM2Encrypt(pubKey *SM2PublicKey, plaintext []byte) ([]byte, error)

SM2Encrypt 使用SM2公钥加密数据。

SM2加密基于椭圆曲线,没有RSA的明文大小限制(理论上可加密任意长度数据, 但实际建议配合对称加密使用信封加密模式)。

func SM2MarshalPrivateKey

func SM2MarshalPrivateKey(privKey *SM2PrivateKey) ([]byte, error)

SM2MarshalPrivateKey 将SM2私钥序列化为PEM格式。

func SM2MarshalPublicKey

func SM2MarshalPublicKey(pubKey *SM2PublicKey) ([]byte, error)

SM2MarshalPublicKey 将SM2公钥序列化为PEM格式。

func SM2Sign

func SM2Sign(privKey *SM2PrivateKey, data []byte) ([]byte, error)

SM2Sign 使用SM2私钥对数据签名。

返回DER编码的签名。签名过程内部使用 SM2 标准签名(含默认 UID 与 SM3 摘要)。

func SM2Verify

func SM2Verify(pubKey *SM2PublicKey, data []byte, signature []byte) error

SM2Verify 使用SM2公钥验证签名。

签名有效返回nil,无效返回错误。

func SM3

func SM3(data string) []byte

SM3 计算字符串的SM3哈希,返回32字节摘要。

func SM3Bytes

func SM3Bytes(data []byte) []byte

SM3Bytes 计算字节切片的SM3哈希,返回32字节摘要。

func SM3Hex

func SM3Hex(data string) string

SM3Hex 计算字符串的SM3哈希,返回十六进制编码字符串。

func Sha256

func Sha256(key string) []byte

Sha256 计算字符串的SHA-256哈希。

SHA-256是安全的,适合用于密码学目的。

返回32字节(256位)哈希。

示例:

hash := enctypt.Sha256("my-secret-key")
// 可用于加密密钥、HMAC等

func Sign

func Sign(privKey *rsa.PrivateKey, data []byte) ([]byte, error)

Sign 使用RSA和SHA-256对数据进行签名。

创建一个可以用公钥验证的数字签名。 返回签名字节。

func Verify

func Verify(pubKey *rsa.PublicKey, data []byte, signature []byte) error

Verify 使用SHA-256验证RSA签名。

如果签名有效返回nil,验证失败返回错误。

Types

type AesEncrypt

type AesEncrypt struct {
	SecretKey string
	// contains filtered or unexported fields
}

func NewAesEncrypt

func NewAesEncrypt(key string) *AesEncrypt

func (*AesEncrypt) Decrypt

func (a *AesEncrypt) Decrypt(data []byte) ([]byte, error)

Decrypt 解密AES-CBC 输入格式: [IV(16字节)][密文]

func (*AesEncrypt) Encrypt

func (a *AesEncrypt) Encrypt(data []byte) ([]byte, error)

Encrypt 使用AES-CBC加密(安全实现) 返回格式: [IV(16字节)][密文]

func (*AesEncrypt) PKCS7Padding

func (a *AesEncrypt) PKCS7Padding(ciphertext []byte, blockSize int) []byte

PKCS7Padding 补码

func (*AesEncrypt) PKCS7UnPadding

func (a *AesEncrypt) PKCS7UnPadding(origData []byte) []byte

PKCS7UnPadding 去码(保留用于兼容性,不推荐使用) Deprecated: 使用 PKCS7UnPaddingWithValidation 代替

func (*AesEncrypt) PKCS7UnPaddingWithValidation

func (a *AesEncrypt) PKCS7UnPaddingWithValidation(origData []byte) ([]byte, error)

PKCS7UnPaddingWithValidation 去填充(带验证)

type AesGcmEncrypt

type AesGcmEncrypt struct {
	SecretKey string
	// contains filtered or unexported fields
}

AesGcmEncrypt AES-GCM加密器(认证加密,推荐使用) GCM模式优势:

  • 自带完整性校验(防篡改)
  • 无需填充(性能更好)
  • 并行化加密(更快)
  • 现代加密标准(TLS 1.3默认)

func NewAesGcmEncrypt

func NewAesGcmEncrypt(key string) *AesGcmEncrypt

NewAesGcmEncrypt 创建AES-GCM加密器(推荐使用此方法)

func (*AesGcmEncrypt) BatchDecrypt

func (a *AesGcmEncrypt) BatchDecrypt(ciphertexts [][]byte) ([][]byte, error)

BatchDecrypt 批量并行解密

func (*AesGcmEncrypt) BatchEncrypt

func (a *AesGcmEncrypt) BatchEncrypt(plaintexts [][]byte) ([][]byte, error)

BatchEncrypt 批量并行加密(适用于多消息场景) 使用 goroutine 池并行处理,充分利用多核 CPU

func (*AesGcmEncrypt) BatchEncryptPooled

func (a *AesGcmEncrypt) BatchEncryptPooled(plaintexts [][]byte, poolSize int) ([][]byte, error)

BatchEncryptPooled 使用 goroutine 池的批量加密(更高效) 适用于大量小包场景(如实时应用服务器)

func (*AesGcmEncrypt) Decrypt

func (a *AesGcmEncrypt) Decrypt(data []byte) ([]byte, error)

Decrypt 解密AES-GCM(自动验证完整性) 输入格式: [Nonce(12字节)][密文+认证标签] 如果数据被篡改,会返回错误

func (*AesGcmEncrypt) Encrypt

func (a *AesGcmEncrypt) Encrypt(data []byte) ([]byte, error)

Encrypt 使用AES-GCM加密(认证加密) 返回格式: [Nonce(12字节)][密文+认证标签] GCM会自动添加16字节认证标签用于验证完整性

type Argon2

type Argon2 struct{}

func NewArgon2

func NewArgon2() *Argon2

func (*Argon2) CompareHashAndPassword

func (b *Argon2) CompareHashAndPassword(password, hashPassword string) bool

CompareHashAndPassword 使用常量时间比较,防止时序攻击

func (*Argon2) Encrypt

func (b *Argon2) Encrypt(password string) (string, error)

Encrypt 使用随机 salt 生成 Argon2id hash,返回 base64(salt+hash)

type BaseEncrypt

type BaseEncrypt struct{}

BaseEncrypt 空操作加密器(不加密),仅用于测试或明确不需要加密的内网场景。

func NewBaseEncrypt

func NewBaseEncrypt() *BaseEncrypt

func (*BaseEncrypt) Decrypt

func (*BaseEncrypt) Decrypt(data []byte) ([]byte, error)

func (*BaseEncrypt) Encrypt

func (*BaseEncrypt) Encrypt(data []byte) ([]byte, error)

type Bcrypt

type Bcrypt struct{}

func NewBcrypt

func NewBcrypt() *Bcrypt

func (*Bcrypt) CompareHashAndPassword

func (b *Bcrypt) CompareHashAndPassword(password, hashPassword string) bool

func (*Bcrypt) Encrypt

func (b *Bcrypt) Encrypt(password string) (string, error)

type Linear

type Linear struct {
	A   *big.Int
	B   *big.Int
	Mod *big.Int
}

func NewLinear

func NewLinear(a, b, mod int64) Linear

func (Linear) CalculateA

func (l Linear) CalculateA() int64

CalculateA 线性混淆A值确定

func (Linear) Decrypt

func (l Linear) Decrypt(id int64) int64

Decrypt 在线性映射中,假设我们知道 a、b、m以及new_id,并希望计算原始的 id。 new_id = (a * id + b) % m 这是一个模运算,当且仅当 a 和 m 互质时,才可能对其进行逆操作找到原始的 id。 假设 a 和 m 是互质的,那么 a 逆元存在,记作 a’,满足 (a * a’) % m = 1。因此,就可以计算出 id = (a’ * (new_id - b)) % m。 计算 a’ 的方法是使用扩展欧几里得算法。

func (Linear) Encrypt

func (l Linear) Encrypt(id int64) int64

type Rsa2

type Rsa2 struct {
	PrivateKey *rsa.PrivateKey
}

Rsa2 提供带PEM密钥加载功能的RSA签名。

注意:尽管名为Rsa2.Encrypt,实际上执行的是签名而不是加密。 为了清晰起见,建议直接使用Sign函数。

func NewRsa2

func NewRsa2() *Rsa2

NewRsa2 创建一个新的Rsa2实例。

在使用Encrypt(Sign)之前必须调用LoadPrivateKey设置私钥。

func (*Rsa2) Encrypt

func (r *Rsa2) Encrypt(data []byte) ([]byte, error)

Encrypt 使用RSA和SHA-256对数据进行签名。

注意:尽管名为Encrypt,此方法实际执行签名而不是加密。 这是为了向后兼容而保留的。建议使用Sign函数以获得更清晰的语义。

返回可以用对应公钥验证的签名。

func (*Rsa2) GetPublicKey

func (r *Rsa2) GetPublicKey() (*rsa.PublicKey, error)

GetPublicKey 返回与已加载私钥对应的公钥。

func (*Rsa2) LoadPrivateKey

func (r *Rsa2) LoadPrivateKey(privateKey string) error

LoadPrivateKey 从PEM格式加载RSA私钥。

采用防御性解析策略:

  1. 优先根据PEM块类型选择解析器(快速路径)
  2. 如果类型不匹配或解析失败,尝试所有可能的解析方法(防御路径)
  3. 返回第一个成功的解析结果

支持的格式:

  • 标准PKCS#1: -----BEGIN RSA PRIVATE KEY-----
  • 标准PKCS#8: -----BEGIN PRIVATE KEY-----
  • 非标准头部但内容合法的PEM(例如某些工具生成的特殊Type)

PEM格式示例:

-----BEGIN RSA PRIVATE KEY-----  (PKCS#1)
...
-----END RSA PRIVATE KEY-----

或

-----BEGIN PRIVATE KEY-----       (PKCS#8)
...
-----END PRIVATE KEY-----

防御性设计说明: 某些工具可能生成非标准的Type字符串,但内容是合法的密钥数据。 本实现会尝试多种解析方法,提供最大兼容性。

type SM2PrivateKey added in v1.1.0

type SM2PrivateKey struct {
	// contains filtered or unexported fields
}

SM2PrivateKey 封装 SM2 私钥,对外不暴露底层 *sm2.PrivateKey,便于后续替换实现。

func GenerateSM2Key

func GenerateSM2Key() (*SM2PrivateKey, error)

GenerateSM2Key 生成SM2密钥对。

func SM2ParsePrivateKey

func SM2ParsePrivateKey(pemData []byte) (*SM2PrivateKey, error)

SM2ParsePrivateKey 从PEM格式解析SM2私钥。

func (*SM2PrivateKey) PublicKey added in v1.1.0

func (p *SM2PrivateKey) PublicKey() *SM2PublicKey

PublicKey 返回与私钥对应的公钥封装。

type SM2PublicKey added in v1.1.0

type SM2PublicKey struct {
	// contains filtered or unexported fields
}

SM2PublicKey 封装 SM2 公钥。

func SM2ParsePublicKey

func SM2ParsePublicKey(pemData []byte) (*SM2PublicKey, error)

SM2ParsePublicKey 从PEM格式解析SM2公钥。

type SM3Password

type SM3Password struct{}

SM3Password 基于 SM3 的密码哈希器(信创推荐)。

func NewSM3Password

func NewSM3Password() *SM3Password

NewSM3Password 创建 SM3 密码哈希器。

func (*SM3Password) CompareHashAndPassword

func (s *SM3Password) CompareHashAndPassword(password, hashPassword string) bool

CompareHashAndPassword 使用常量时间比较验证密码,防止时序攻击。

func (*SM3Password) Encrypt

func (s *SM3Password) Encrypt(password string) (string, error)

Encrypt 使用随机 salt + SM3 迭代生成密码哈希,返回 base64(salt + hash)。

type SM4Encrypt

type SM4Encrypt struct {
	SecretKey string
	// contains filtered or unexported fields
}

SM4Encrypt SM4-CBC加密器

func NewSM4Encrypt

func NewSM4Encrypt(key string) *SM4Encrypt

NewSM4Encrypt 创建SM4-CBC加密器

func (*SM4Encrypt) Decrypt

func (s *SM4Encrypt) Decrypt(data []byte) ([]byte, error)

Decrypt 解密SM4-CBC 输入格式: [IV(16字节)][密文]

func (*SM4Encrypt) Encrypt

func (s *SM4Encrypt) Encrypt(data []byte) ([]byte, error)

Encrypt 使用SM4-CBC加密 返回格式: [IV(16字节)][密文]

type SM4GcmEncrypt

type SM4GcmEncrypt struct {
	SecretKey string
	// contains filtered or unexported fields
}

SM4GcmEncrypt SM4-GCM加密器(认证加密,推荐)

func NewSM4GcmEncrypt

func NewSM4GcmEncrypt(key string) *SM4GcmEncrypt

NewSM4GcmEncrypt 创建SM4-GCM加密器

func (*SM4GcmEncrypt) Decrypt

func (s *SM4GcmEncrypt) Decrypt(data []byte) ([]byte, error)

Decrypt 解密SM4-GCM(自动验证完整性) 输入格式: [Nonce(12字节)][密文+认证标签]

func (*SM4GcmEncrypt) Encrypt

func (s *SM4GcmEncrypt) Encrypt(data []byte) ([]byte, error)

Encrypt 使用SM4-GCM加密(认证加密) 返回格式: [Nonce(12字节)][密文+认证标签]

type ZeroCopyAesGcmEncrypt

type ZeroCopyAesGcmEncrypt struct {
	SecretKey string
	// contains filtered or unexported fields
}

ZeroCopyAesGcmEncrypt 零拷贝版本的 AES-GCM 加密器 适用于对性能要求极高的场景(高频交易、实时应用)

⚠️ 注意:调用方必须在使用完毕后调用 buf.Release()

func NewZeroCopyAesGcmEncrypt

func NewZeroCopyAesGcmEncrypt(key string) *ZeroCopyAesGcmEncrypt

NewZeroCopyAesGcmEncrypt 创建零拷贝加密器

func (*ZeroCopyAesGcmEncrypt) DecryptZeroCopy

func (a *ZeroCopyAesGcmEncrypt) DecryptZeroCopy(data []byte) (*zpool.Buffer, error)

DecryptZeroCopy 零拷贝解密 返回的 *pool.Buffer 来自对象池,必须调用 buf.Release() 归还

func (*ZeroCopyAesGcmEncrypt) EncryptInPlace

func (a *ZeroCopyAesGcmEncrypt) EncryptInPlace(dst, plaintext []byte) ([]byte, error)

EncryptInPlace 原地加密(最激进的零拷贝) ⚠️ 会修改 dst 缓冲,适用于预分配场景

dst 必须有足够容量:cap(dst) >= len(plaintext) + nonceSize + tagSize

func (*ZeroCopyAesGcmEncrypt) EncryptZeroCopy

func (a *ZeroCopyAesGcmEncrypt) EncryptZeroCopy(data []byte) (*zpool.Buffer, error)

EncryptZeroCopy 零拷贝加密 返回的 *pool.Buffer 来自对象池,必须调用 buf.Release() 归还

使用方式:

buf, err := cipher.EncryptZeroCopy(plaintext)
defer buf.Release()
// 使用 buf.B ...

Jump to

Keyboard shortcuts

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