Skip to content

x-crypto-s 加解密

开发文档

TMUI4.0文档TMUI4.0组件库

加密插件

说明

这是tmui4.0|XUI的原生插件附赠插件,提供了多种加密算法的实现,包括MD5、Base64、SHA系列、AES、DES、RSA、RC4 以及国密 SM2/SM3/SM4。国际算法与 CryptoJS 对齐;国密默认与 sm-crypto / 微信小程序对齐,五端可交叉加解密和验签。

兼容性

HarmonyIOSAndroidWEB小程序
支持支持支持支持支持

API说明

MD5加密

ts
function md5(str: string): string
  • 参数:
    • str: 待加密的字符串
  • 返回值:MD5加密后的字符串

Base64编解码

ts
function base64Encode(str: string): string
function base64Decode(str: string): string
  • 参数:
    • str: 待编码/解码的字符串
  • 返回值:Base64编码/解码后的字符串
  • 注意:在Web端加密中文字符时,需要先使用encodeURI处理

SHA系列加密

ts
function sha256(str: string): string
function sha512(str: string): string
function sha1(str: string): string
function hmacSha256(key: string, data: string): string
function hmacSha512(key: string, data: string): string
  • 参数:
    • str/data: 待加密的字符串
    • key: HMAC加密的密钥
  • 返回值:对应算法加密后的字符串

AES加密

ts
function aesEncrypt(key: string, data: string, mode: string = "ECB", iv: string|null = null, keySize: number|null = null): string
function aesDecrypt(key: string, data: string, mode: string = "ECB", iv: string|null = null, keySize: number|null = null): string
  • 参数:
    • key: 加密密钥(UTF-8字符串,根据keySize截取和补足)
    • data: 待加密/解密的数据(base64字符串)
    • mode: 加密模式,支持ECB和CBC
    • iv: 初始化向量
    • keySize: 密钥长度(16=128位, 24=192位, 32=256位)
  • 返回值:加密(经过base64字符串)/解密后的字符串

DES加密

ts
function desEncrypt(key: string, data: string, mode: string = "ECB", iv: string|null = null): string
function desDecrypt(key: string, data: string, mode: string = "ECB", iv: string|null = null): string
  • 参数:
    • key: 加密密钥
    • data: 待加密/解密的数据
    • mode: 加密模式,支持ECB和CBC
    • iv: 初始化向量
  • 返回值:加密/解密后的字符串

RSA加密

ts
function generateRSAKeyPair(keySize: number = 2048): RSARANDOMKEY
function rsaEncrypt(publicKey: string, data: string): string
function rsaDecrypt(privateKey: string, data: string): string
  • 参数:
    • keySize: RSA密钥长度
    • publicKey: 公钥
    • privateKey: 私钥
    • data: 待加密/解密的数据
  • 返回值:
    • generateRSAKeyPair: 返回包含publicKey和privateKey的对象
    • rsaEncrypt/rsaDecrypt: 加密/解密后的字符串

RC4加密

ts
function rc4Encrypt(key: string, data: string): string
function rc4Decrypt(key: string, data: string): string
  • 参数:
    • key: 加密密钥
    • data: 待加密/解密的数据
  • 返回值:加密/解密后的字符串(hex格式)

国密 SM3

ts
function sm3(str: string): string
function hmacSm3(key: string, data: string): string
  • 参数:
    • str/data: 待摘要的 UTF-8 字符串
    • key: HMAC 密钥(UTF-8)
  • 返回值:小写 hex。sm3("abc") 固定为 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0

国密 SM4

ts
function sm4Encrypt(key: string, data: string, mode: string = "ECB", iv: string|null = null): string
function sm4Decrypt(key: string, data: string, mode: string = "ECB", iv: string|null = null): string
  • 参数:
    • key/iv: UTF-8 字符串,按字节补 0 或截断到 16 字节(与 AES 相同)
    • data: 加密为明文;解密为 hex 密文
    • mode: ECBCBC
  • 返回值:加密为小写 hex(注意:不是 AES 的 Base64);解密为 UTF-8 明文
  • 填充:PKCS7,密钥长度固定 128 位

国密 SM2

ts
function generateSM2KeyPair(): SM2RANDOMKEY
function sm2Encrypt(publicKey: string, data: string, cipherMode?: number): string
function sm2Decrypt(privateKey: string, data: string, cipherMode?: number): string
function sm2Sign(privateKey: string, data: string, userId?: string): string
function sm2Verify(publicKey: string, data: string, signHex: string, userId?: string): boolean
  • 密钥:publicKey 为未压缩 04||X||Y(130 hex),privateKey 为 64 hex
  • 密文:裸 hex,默认 cipherMode=1 即 C1C3C2,与 sm-crypto 一致;C1 为 X||Y(128 hex,无 04)。0 为 C1C2C3。解密时若带 04 前缀会自动去掉
  • 签名:r||s 裸 hex(128 hex),userId 默认 1234567812345678
  • 失败返回 "" / false,不抛异常

使用示例

ts
import {
  md5, sha256, sha512, sha1, hmacSha256, hmacSha512,
  base64Encode, base64Decode,
  aesEncrypt, aesDecrypt,
  desEncrypt, desDecrypt,
  rsaEncrypt, rsaDecrypt,
  rc4Encrypt, rc4Decrypt,
  generateRSAKeyPair,
  sm3, hmacSm3, sm4Encrypt, sm4Decrypt,
  generateSM2KeyPair, sm2Encrypt, sm2Decrypt, sm2Sign, sm2Verify
} from '@/uni_modules/x-crypto-s'

// MD5加密
const md5Result = md5("TMUI4.0X")

// Base64编解码
const base64Result = base64Encode("TMUI4.0X")
const decodedText = base64Decode(base64Result)

// SHA系列加密
const sha256Result = sha256("TMUI4.0X")
const hmacResult = hmacSha256("密钥", "TMUI4.0X")

// AES加密(CBC模式)
const aesResult = aesEncrypt(
  "1234567890abcdef",
  "TMUI4.0X",
  "CBC",
  "1234567890abcdef"
)
const aesDecrypted = aesDecrypt(
  "1234567890abcdef",
  aesResult,
  "CBC",
  "1234567890abcdef"
)

// RSA加密
const rsaKeys = generateRSAKeyPair()
const encrypted = rsaEncrypt(rsaKeys.publicKey, "TMUI4.0X")
const decrypted = rsaDecrypt(rsaKeys.privateKey, encrypted)

// 国密 SM3 / SM4 / SM2
const sm3Hex = sm3("abc")
const sm4Hex = sm4Encrypt("1234567890abcdef", "TMUI4.0X", "CBC", "1234567890abcdef")
const sm4Plain = sm4Decrypt("1234567890abcdef", sm4Hex, "CBC", "1234567890abcdef")
const sm2Keys = generateSM2KeyPair()
const sm2Hex = sm2Encrypt(sm2Keys.publicKey, "TMUI4.0X")
const sm2Plain = sm2Decrypt(sm2Keys.privateKey, sm2Hex)
const signHex = sm2Sign(sm2Keys.privateKey, "TMUI4.0X")
const pass = sm2Verify(sm2Keys.publicKey, "TMUI4.0X", signHex)

更多使用示例和在线加密对比工具:

更新日志

1.1.0(2026-08-16)

  • 五端补齐国密 SM2 / SM3 / SM4,默认对齐 sm-crypto:SM3/HMAC-SM3 小写 hex,SM4 密文 hex + PKCS7,SM2 裸 hex C1C3C2(C1 无 04 前缀)、签名 r||s,userId 默认 1234567812345678。
  • iOS 不再依赖 GMObjC CocoaPods,改为内置 SM3/SM4/SM2 实现,避免本机 trunk 找不到 pod。

1.0.5(2026-03-15)

  • 鸿蒙端aes加密ecb模式修复加密内容为空的问题。

1.0.4(2026-01-31)

  • 根据网友反馈的自己搭的环境打包修改了两行代码兼容。如果你是云打包,可以不升级,因为云打包是没问题的。只是他们部分人自己搭的环境打包不了。

1.0.3(2025-08-17)

  • 兼容支持鸿蒙 Next

1.0.2(2025-03-15)

  • 更新所有端都支持同样的加密方案。

1.0.1(2025-02-28)

  • 补齐hmacSha512,sha512,aesEncrypt,aesDecrypt增加keySize加密位,增加了generateRSAKeyPair生成RSA密钥对.

1.0.0(2024-12-24)

  • 常用 加密 三端可用.暂不支持sm2,sm3,sm4,下个版本提供.
最近更新