更新记录
1.2.0(2026-07-18) 下载此版本
新增
- MD5 摘要:新增扁平函数
md5(message)与CryptoJS.MD5(message)方法,三端原生实现(AndroidMessageDigest、iOSCC_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 风格命名空间对象,包含 enc、AES、mode、pad 四个子命名空间,以及 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

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 60
赞赏 3
下载 12437781
赞赏 1934
赞赏
京公网安备:11010802035340号