更新记录

1.2.0(2026-07-18) 下载此版本

新增

  • MD5 摘要:新增扁平函数 md5(message)CryptoJS.MD5(message) 方法,三端原生实现(Android MessageDigest、iOS CC_MD5、鸿蒙 cryptoFramework.createMd
  • 返回 WordArray,配合 hexStringify() 得到 32 位十六进制摘要,对齐 CryptoJS.MD5(str).toString()

平台兼容性

uni-app x(5.0)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - -

ff-uni-crypto

CryptoJS 风格的 AES 加密与 MD5 摘要 UTS 插件,支持 Android / iOS / 鸿蒙三端原生实现。

功能特性

  • utf8Parse() / utf8Stringify() — UTF-8 编解码
  • base64Parse() / base64Stringify() — Base64 编解码
  • hexParse() / hexStringify() — Hex 编解码
  • aesEncrypt() — AES 加密(ECB 模式 + PKCS7 填充)
  • md5() — MD5 摘要(三端原生实现)
  • getCryptoJS() — 获取 CryptoJS 风格命名空间(mode / pad 常量、MD5 方法)
  • ✅ 密钥自动补位(不足 16 字节时尾部补 0)
  • ✅ 扁平化函数导出,避免 iOS JSCore 桥接嵌套对象丢失问题

安装

ff-uni-crypto 目录放置于项目的 uni_modules/ 目录下即可。

uniappx/
└── uni_modules/
    └── ff-uni-crypto/

快速开始

方式一:扁平函数(推荐,三端均稳定)

import {
  utf8Parse,
  utf8Stringify,
  base64Parse,
  base64Stringify,
  hexParse,
  hexStringify,
  aesEncrypt,
  md5,
  getCryptoJS
} from '@/uni_modules/ff-uni-crypto'

// 获取 mode / pad 常量(仅用于配置,纯数据 UTSJSONObject,桥接稳定)
const CryptoJS = getCryptoJS()

// 加密
const pwd = utf8Parse('123456')
const key = utf8Parse('xxxx')
const encrypted = aesEncrypt(pwd, key, {
  mode: 'ecb',
  padding: 'pkcs7'
} as UTSJSONObject)

console.log(encrypted) // Base64 密文

// MD5 摘要(对齐 CryptoJS.MD5('123456').toString())
const digest = hexStringify(md5('123456'))
console.log(digest) // "e10adc3949ba59abbe56e057f20f883e"

// UTF-8 往返验证
const wa = utf8Parse('Hello 世界')
const back = utf8Stringify(wa)
console.log(back) // "Hello 世界"

方式二:CryptoJS 风格对象

import { getCryptoJS } from '@/uni_modules/ff-uni-crypto'

const CryptoJS = getCryptoJS()

// 编码工具
const wa = CryptoJS.enc.Utf8.parse('Hello')
const str = CryptoJS.enc.Utf8.stringify(wa)

const base64Wa = CryptoJS.enc.Base64.parse('SGVsbG8=')
const base64Str = CryptoJS.enc.Base64.stringify(base64Wa)

const hexWa = CryptoJS.enc.Hex.parse('48656c6c6f')
const hexStr = CryptoJS.enc.Hex.stringify(hexWa)

// AES 加密(使用扁平函数,传入字符串模式)
const pwd = CryptoJS.enc.Utf8.parse('123456')
const key = CryptoJS.enc.Utf8.parse('xxx')
import { aesEncrypt } from '@/uni_modules/ff-uni-crypto'
const encrypted = aesEncrypt(pwd, key, {
  mode: 'ecb',
  padding: 'pkcs7'
} as UTSJSONObject)

API 说明

扁平函数

以下函数为三端统一导出,可在 uvue 页面直接 import 调用,避免嵌套对象在 iOS JSCore 桥接丢失。

utf8Parse(str)

将字符串按 UTF-8 编码为 WordArray。

参数 类型 说明
str string 待编码的字符串

返回值:WordArray

utf8Stringify(wa)

将 WordArray 按 UTF-8 解码为字符串。

参数 类型 说明
wa WordArray 待解码的 WordArray

返回值:string

base64Parse(str)

将 Base64 字符串解码为 WordArray。

参数 类型 说明
str string Base64 编码字符串

返回值:WordArray

base64Stringify(wa)

将 WordArray 编码为 Base64 字符串。

参数 类型 说明
wa WordArray 待编码的 WordArray

返回值:string

hexParse(str)

将 Hex 字符串解码为 WordArray。

参数 类型 说明
str string Hex 编码字符串(如 '48656c6c6f'

返回值:WordArray

hexStringify(wa)

将 WordArray 编码为 Hex 字符串。

参数 类型 说明
wa WordArray 待编码的 WordArray

返回值:string

aesEncrypt(plaintext, key, cfg)

AES-128-ECB 加密。

参数 类型 说明
plaintext WordArray 明文 WordArray
key WordArray 密钥 WordArray
cfg.mode string 加密模式,传 'ecb'
cfg.padding string 填充方式,传 'pkcs7''nopadding'

返回值:string — Base64 编码的密文

md5(message)

MD5 摘要。对齐 CryptoJS.MD5(message)

参数 类型 说明
message string 待摘要的字符串(按 UTF-8 编码)

返回值:WordArray — 16 字节摘要,配合 hexStringify() 可得 32 位十六进制串(对齐 CryptoJS.MD5(str).toString());配合 base64Stringify() 可得 Base64 摘要。

import { md5, hexStringify } from '@/uni_modules/ff-uni-crypto'

const hex = hexStringify(md5('123456'))
// "e10adc3949ba59abbe56e057f20f883e"

密钥补位

当密钥字符串 UTF-8 编码后不足 16 字节时,插件会在尾部补 0 到 16 字节(对齐 AES-128 密钥长度)。 超过 16 字节时,仅取前 16 字节。

getCryptoJS()

返回 CryptoJS 风格命名空间对象,包含 encAESmodepad 四个子命名空间,以及 MD5(message) 方法。

注意:在 iOS 端 uvue 页面中,CryptoJS.enc.Utf8.parse 等嵌套方法调用可能为 undefined(JSCore 桥接限制)。建议仅用 getCryptoJS() 获取 mode / pad 常量(纯数据),编解码和加密使用扁平函数。

const CryptoJS = getCryptoJS()

// mode / pad 常量(纯数据 UTSJSONObject,桥接正常)
console.log(CryptoJS.mode.ECB)   // { name: 'ecb' }
console.log(CryptoJS.pad.Pkcs7)  // { name: 'pkcs7' }

错误码

错误码 含义
1001 密钥不能为空
1002 AES 加密失败
1003 不支持的加密模式或填充方式

平台支持

平台 原生 API 最低版本
Android javax.crypto.Cipher / java.security.MessageDigest API 21+
iOS CommonCrypto CCCrypt / CC_MD5 iOS 12+
鸿蒙 @ohos.security.cryptoFramework API 21+

注意事项

  • ECB 模式下相同明文产生相同密文,适用于短密码加密
  • 长文本加密建议使用 CBC 模式(后续版本支持)
  • 业务侧应避免将密钥写死在前端代码中
  • iOS 端已知限制getCryptoJS() 返回的嵌套对象中,enc.Utf8.parse 等方法在 JSCore 环境可能为 undefined,请使用扁平函数 utf8Parse() / utf8Stringify() 等代替

变更日志

详见 changelog.md

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。