加密与签名

加密操作,包括加密、HMAC、JWT 和密钥派生。适配工作流使用。

加载

local crypto = require("crypto")

随机生成

随机字节

local bytes, err = crypto.random.bytes(32)
参数 类型 描述
length integer 字节数(1 到 1,048,576)

返回值: string, error

随机字符串

local str, err = crypto.random.string(32)
local str, err = crypto.random.string(32, "0123456789abcdef")
参数 类型 描述
length integer 字符串长度(1 到 1,048,576)
charset string? 使用的字符集(默认:字母数字)

返回值: string, error

随机 UUID

local id, err = crypto.random.uuid()

返回值: string, error

HMAC

HMAC-SHA256

local hex, err = crypto.hmac.sha256(key, data)
参数 类型 描述
key string HMAC 密钥
data string 要认证的数据

返回值: string, error

HMAC-SHA512

local hex, err = crypto.hmac.sha512(key, data)
参数 类型 描述
key string HMAC 密钥
data string 要认证的数据

返回值: string, error

加密

AES-GCM {id="encrypt-aes-gcm"}

local encrypted, err = crypto.encrypt.aes(data, key)
local encrypted, err = crypto.encrypt.aes(data, key, aad)
参数 类型 描述
data string 要加密的明文
key string 16、24 或 32 字节(AES-128/192/256)
aad string? 附加认证数据

返回值: string, error(nonce 前置)

ChaCha20-Poly1305 {id="encrypt-chacha20"}

local encrypted, err = crypto.encrypt.chacha20(data, key)
local encrypted, err = crypto.encrypt.chacha20(data, key, aad)
参数 类型 描述
data string 要加密的明文
key string 必须为 32 字节
aad string? 附加认证数据

返回值: string, error

解密

AES-GCM {id="decrypt-aes-gcm"}

local plaintext, err = crypto.decrypt.aes(encrypted, key)
local plaintext, err = crypto.decrypt.aes(encrypted, key, aad)
参数 类型 描述
data string 来自 encrypt.aes 的加密数据
key string 加密时使用的相同密钥
aad string? 必须与加密时使用的 AAD 匹配

返回值: string, error

ChaCha20-Poly1305 {id="decrypt-chacha20"}

local plaintext, err = crypto.decrypt.chacha20(encrypted, key)
local plaintext, err = crypto.decrypt.chacha20(encrypted, key, aad)
参数 类型 描述
data string 来自 encrypt.chacha20 的加密数据
key string 加密时使用的相同密钥
aad string? 必须与加密时使用的 AAD 匹配

返回值: string, error

JWT

编码

local token, err = crypto.jwt.encode(payload, secret)
local token, err = crypto.jwt.encode(payload, secret, "HS256")
local token, err = crypto.jwt.encode(payload, private_key_pem, "RS256")
参数 类型 描述
payload table JWT 声明(_header 用于自定义头)
key string 密钥(HMAC)或 PEM 私钥(RSA)
alg string? HS256、HS384、HS512、RS256(默认:HS256)

返回值: string, error

验证

local claims, err = crypto.jwt.verify(token, secret)
local claims, err = crypto.jwt.verify(token, secret, "HS256", false)
local claims, err = crypto.jwt.verify(token, public_key_pem, "RS256")
参数 类型 描述
token string 要验证的 JWT 令牌
key string 密钥(HMAC)或 PEM 公钥(RSA)
alg string? 预期算法(默认:HS256)
require_exp boolean? 验证过期时间(默认:true)

返回值: table, error

密钥派生

PBKDF2

local key, err = crypto.pbkdf2(password, salt, iterations, key_length)
local key, err = crypto.pbkdf2(password, salt, iterations, key_length, "sha512")
参数 类型 描述
password string 密码/口令
salt string 盐值
iterations integer 迭代次数(最大 10,000,000)
key_length integer 所需密钥长度(字节)
hash string? sha256 或 sha512(默认:sha256)

返回值: string, error

工具函数

常量时间比较

local equal = crypto.constant_time_compare(a, b)
参数 类型 描述
a string 第一个字符串
b string 第二个字符串

返回值: boolean

错误

条件 类型 可重试
无效的长度 errors.INVALID
空密钥 errors.INVALID
无效的密钥大小 errors.INVALID
解密失败 errors.INTERNAL
令牌已过期 errors.INTERNAL

参见 错误处理 了解如何处理错误。