请改用 sm2CompressPublicKey。
请改用 sm3Digest。
具名导出 eea3。
具名导出 eea3Encrypt。
具名导出 eia3。
请改用 sm2GenerateKeyPair。
请改用 sm3Hmac。
具名导出 hmacSha256。
具名导出 hmacSha384。
具名导出 hmacSha512。
请改用 sm2KeyExchange。
SHA 与 HMAC API 命名空间。
SHA-1 增量摘要类,仅用于旧协议兼容。
SHA-256 增量摘要类。
SHA-384 增量摘要类。
SHA-512 增量摘要类。
计算 HMAC-SHA256
密钥(字符串或 Uint8Array)
要认证的数据(字符串或 Uint8Array)
可选options: SHAOptions
哈希选项
HMAC 值(默认十六进制字符串,64 个字符)
计算 HMAC-SHA384
密钥(字符串或 Uint8Array)
要认证的数据(字符串或 Uint8Array)
可选options: SHAOptions
哈希选项
HMAC 值(默认十六进制字符串,96 个字符)
计算 HMAC-SHA512
密钥(字符串或 Uint8Array)
要认证的数据(字符串或 Uint8Array)
可选options: SHAOptions
哈希选项
HMAC 值(默认十六进制字符串,128 个字符)
计算 SHA-1 哈希摘要
⚠️ 安全警告: SHA-1 已于 2017 年被 Google 证明存在实际碰撞攻击(SHAttered)。 请勿用于密码签名、数字证书等安全敏感场景。 仅建议用于兼容旧系统或非安全敏感的校验和。
输入数据(字符串或 Uint8Array)
可选options: SHAOptions
哈希选项
哈希摘要(默认十六进制字符串,40 个字符)
计算 SHA-256 哈希摘要
输入数据(字符串或 Uint8Array)
可选options: SHAOptions
哈希选项
哈希摘要(默认十六进制字符串,64 个字符)
计算 SHA-384 哈希摘要
输入数据(字符串或 Uint8Array)
可选options: SHAOptions
哈希选项
哈希摘要(默认十六进制字符串,96 个字符)
计算 SHA-512 哈希摘要
输入数据(字符串或 Uint8Array)
可选options: SHAOptions
哈希选项
哈希摘要(默认十六进制字符串,128 个字符)
具名导出 sha1。
具名导出 sha256。
具名导出 sha384。
具名导出 sha512。
请改用 sm2Sign。
SM2 函数与对象式 API 命名空间。
SM2 对象式 API。实例可持有密钥并执行加解密、签名验签和密钥交换。
压缩公钥(从非压缩格式转换为压缩格式)
SM2 公钥是椭圆曲线上的点 (x, y),有两种表示格式:
非压缩格式(65 字节):04 || x || y
压缩格式(33 字节):02/03 || x
压缩的原理: 由于椭圆曲线方程 y² = x³ + ax + b,给定 x 坐标,可以计算出两个可能的 y 值 (一个为正,一个为负,或者说一个为奇数,一个为偶数)。 因此只需要保存 x 坐标和 y 的奇偶性,就可以恢复完整的点坐标。
优势:
非压缩格式的公钥(十六进制字符串,04 + x + y)
压缩格式的公钥(十六进制字符串,02/03 + x)
解压公钥(从压缩格式转换为非压缩格式)
从压缩格式恢复完整的公钥坐标。
解压过程:
注意:
压缩格式的公钥(十六进制字符串,02/03 + x)或非压缩格式
非压缩格式的公钥(十六进制字符串,04 + x + y)
使用 SM2 解密数据
支持自动识别密文格式:
注意:
私钥(十六进制字符串)
加密的数据(十六进制/Base64 字符串或 Uint8Array)
可选options: SM2DecryptOptions
输入编码和密文排列;省略时自动识别编码并默认使用 C1C3C2
解密后的数据(UTF-8 字符串)
使用 SM2 私钥解密并返回原始字节;二进制协议不应经过 UTF-8 字符串转换。
32 字节私钥或对应 Hex 字符串
Hex/Base64 密文字符串或原始密文字节
可选options: SM2DecryptOptions
密文排列与字符串输入编码;省略时自动识别编码和排列
通过 C3 完整性校验的原始明文字节
使用 SM2 加密数据
公钥(十六进制字符串)
要加密的数据(字符串或 Uint8Array)
可选options: SM2EncryptOptions
加密选项对象
加密后的数据(默认十六进制字符串)
从私钥导出公钥
私钥(十六进制字符串)
是否返回压缩格式(默认 false,返回非压缩格式)
公钥(十六进制字符串,压缩格式:02/03 + x,非压缩格式:04 + x + y)
SM2 密钥交换协议
标准参考:
这是一个安全的密钥协商协议,允许两方在不安全的通道上协商出共享密钥。
协议流程:
安全特性:
密钥交换参数
密钥交换结果,包含临时公钥、共享密钥和可选的确认哈希值
// 双方先生成长期密钥对和本次会话的临时密钥对。
const keyPairA = generateKeyPair();
const keyPairB = generateKeyPair();
const tempKeyPairA = generateKeyPair();
const tempKeyPairB = generateKeyPair();
const resultA = keyExchange({
privateKey: keyPairA.privateKey,
publicKey: keyPairA.publicKey,
peerPublicKey: keyPairB.publicKey,
tempPrivateKey: tempKeyPairA.privateKey,
peerTempPublicKey: tempKeyPairB.publicKey,
isInitiator: true
});
const resultB = keyExchange({
privateKey: keyPairB.privateKey,
publicKey: keyPairB.publicKey,
peerPublicKey: keyPairA.publicKey,
tempPrivateKey: tempKeyPairB.privateKey,
peerTempPublicKey: tempKeyPairA.publicKey,
isInitiator: false
});
if (resultA.sharedKey !== resultB.sharedKey) {
throw new Error('SM2 密钥交换结果不一致');
}
使用 SM2 签名数据
私钥(十六进制字符串)
要签名的数据(字符串或 Uint8Array)
可选options: SignOptions
签名选项
签名(默认十六进制字符串;raw 为 r||s,der 为 ASN.1 DER)
使用 SM2 验证签名
公钥(十六进制字符串)
原始数据(字符串或 Uint8Array)
签名(十六进制字符串,r || s 格式或 DER 编码)
可选options: VerifyOptions
验签选项
签名是否有效
具名导出 sm2CompressPublicKey。
具名导出 sm2DecompressPublicKey。
具名导出 sm2Decrypt。
具名导出 sm2DecryptBytes。
具名导出 sm2Encrypt。
具名导出 sm2GenerateKeyPair。
具名导出 sm2KeyExchange。
具名导出 sm2Sign。
具名导出 sm2Verify。
SM3 函数与对象式 API 命名空间。
SM3 对象式 API,支持一次性摘要、HMAC 和增量摘要。
兼容命名:与文档示例和旧版本 API 保持一致
计算 SM3 哈希摘要(优化实现,减少内存分配并直接操作缓冲区)
输入数据(字符串或 Uint8Array)
可选options: SM3Options
哈希选项
哈希摘要(默认为小写十六进制字符串,64 个字符)
计算 SM3-HMAC
密钥(字符串或 Uint8Array)
要认证的数据(字符串或 Uint8Array)
可选options: SM3Options
哈希选项
HMAC 值(默认为小写十六进制字符串,64 个字符)
具名导出 sm3Digest。
具名导出 sm3Hmac。
SM4 函数与对象式 API 命名空间。
SM4 对象式 API,实例保存 key、mode、padding 与可选 IV 配置。
使用 SM4 解密数据 Decrypt data using SM4 block cipher
支持的模式 (Supported modes):
支持的填充模式 (Supported padding modes):
解密密钥(十六进制字符串,32 个字符 = 16 字节) Decryption key (hex string, 32 chars = 16 bytes)
加密的数据(十六进制字符串或 AEAD 结果对象) Encrypted data (hex string or AEAD result object)
可选options: SM4DecryptOptions
解密选项(模式、填充、IV、tag用于 GCM/CCM) Decryption options (mode, padding, IV, tag for GCM/CCM)
解密后的数据(UTF-8 字符串) Decrypted data (UTF-8 string)
使用 SM4 解密为原始字节;文本入口会额外执行 UTF-8 解码。
固定 16 字节的密钥或 32 个 Hex 字符
字符串、原始密文字节或带 tag 的结构化结果
可选options: SM4DecryptOptions
mode、padding、IV/nonce、AAD、tag 与输入编码
解密并完成填充/AEAD 校验后的原始字节
使用 SM4 加密数据 Encrypt data using SM4 block cipher
支持的模式 (Supported modes):
支持的填充模式 (Supported padding modes):
加密密钥(十六进制字符串,32 个字符 = 16 字节) Encryption key (hex string, 32 chars = 16 bytes)
要加密的数据(字符串或 Uint8Array) Data to encrypt (string or Uint8Array)
可选options: SM4Options
加密选项(模式、填充、IV) Encryption options (mode, padding, IV)
小写十六进制字符串形式的加密数据,或GCM模式下返回包含密文和标签的对象 Encrypted data as lowercase hex string, or object with ciphertext and tag for GCM mode
具名导出 sm4Decrypt。
具名导出 sm4DecryptBytes。
具名导出 sm4Encrypt。
请改用 sm2Verify。
ZUC、EEA3 与 EIA3 API 命名空间。
ZUC 对象式 API,实例保存 128 位 key 与 IV。
使用 ZUC-128 流密码解密数据
128-bit key (16 bytes or 32 hex chars) / 128 位密钥
128-bit IV (16 bytes or 32 hex chars) / 128 位初始向量
Encrypted data (hex or base64 string, auto-detected) / 加密的数据(十六进制或 base64,自动检测)
可选options: ZUCDecryptOptions
字符串输入编码;省略时优先识别 Hex,再识别 Base64
Decrypted data as string / 解密后的数据
使用 ZUC-128 解密为原始字节;文本 API 无法无损表示任意二进制数据。
16 字节密钥或 32 个 Hex 字符
16 字节 IV 或 32 个 Hex 字符
Hex/Base64 字符串或原始密文字节
可选options: ZUCDecryptOptions
字符串输入编码;省略时自动识别
与密文等长的原始明文字节
生成 EEA3 密钥流(用于 LTE 加密) 优化:单次分配 IV 缓冲区
128 位保密密钥
32 位计数值
5 位承载标识
1 位方向标志(0 表示上行,1 表示下行)
需要生成的密钥流比特长度
EEA3 密钥流
生成 EIA3 完整性标签(用于 LTE 认证)
128 位完整性密钥
32 位计数值
5 位承载标识
1 位方向标志(0 表示上行,1 表示下行)
待认证的消息
可选bitLength: number
参与认证的消息 bit 数;省略时使用全部字节
32 位 MAC-I(十六进制字符串)
使用 ZUC-128 流密码加密数据
128-bit key (16 bytes or 32 hex chars) / 128 位密钥
128-bit IV (16 bytes or 32 hex chars) / 128 位初始向量
Data to encrypt (string or Uint8Array) / 要加密的数据
可选options: ZUCOptions
Encryption options / 加密选项
Encrypted data (default hex string) / 加密后的数据(默认十六进制字符串)
生成 ZUC-128 密钥流
128 位密钥(16 字节或 32 个十六进制字符)
128 位初始向量(16 字节或 32 个十六进制字符)
需要输出的 32 位密钥字数量
32 位密钥字数组
具名导出 zucDecrypt。
具名导出 zucDecryptBytes。
具名导出 zucEncrypt。
具名导出 zucGenerateKeystream。
具名导出 zucKeystream。
具名导出 zucKeystreamWords。
UMD 与旧版整体导入使用的聚合对象。
新的 ESM/CommonJS 代码优先使用具名导出,以便静态分析和 tree-shaking。