更新记录

1.0.0(2026-09-07) 下载此版本

首个版本。

  • 摘要算法:MD5、SHA-1、SHA-256、HMAC-SHA256(UTF-8 输入,Hex 输出,另提供 SHA-256 → Base64Url)
  • 对称加密:AES-128 / 192 / 256,ECB / CBC 分组模式,PKCS7 填充,Base64 / Hex 输出,与后端常见 AES 实现互通
  • 编码转换:UTF-8 / Base64 / Base64Url / Hex,不依赖 btoa/atob/TextEncoder/Buffer,iOS JSCore 与小程序环境可用
  • 随机工具:随机字节(优先平台 crypto.getRandomValues)、随机字符串、PKCE verifier、UUID v4
  • PKCE(RFC 7636,S256):createPkce 一步生成 code_verifier / code_challenge
  • 全部算法为纯 JS 本地计算,无原生依赖、无需自定义调试基座,H5 / App / 小程序全端可用
  • 附带 node:test 对拍 node:crypto 的正确性测试(tests/crypto.test.cjs)与 TS 类型声明(js_sdk/index.d.ts)

平台兼容性

uni-app(4.25)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ √ √ √ √ 5.0 12 √
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
√ √ √ √ √ √ × √ √ √ × ×

fz-utils

1.0.0

纯 JS 算法工具:MD5 / SHA / HMAC、AES、Base64 / Hex、随机串、PKCE。全端可用,不需要自定义基座,不发起网络请求。

接入

复制到 uni_modules,按需导入:

import {
    md5, sha256, hmacSha256,
    aesEncrypt, aesDecrypt,
    base64Encode, base64Decode,
    randomString, uuid,
    createPkce
} from '@/uni_modules/fz-utils/js_sdk/index.js'

也可以只引单个模块,例如 @/uni_modules/fz-utils/js_sdk/md5.js。演示页:pages/utils/utils。

Options API 页面不要在 <template> 里直接调导入函数,在 methods 里包一层。

摘要

md5('hello')
sha1('hello')
sha256('hello')
hmacSha256('message', 'secret')
sha256Base64Url('some verifier')

入参为字符串(UTF-8)或 Uint8Array。md5 / sha1 / sha256 / hmacSha256 返回小写 Hex。

AES

const key = '1234567890abcdef'   // 16 / 24 / 32 字节 → AES-128 / 192 / 256
const iv  = 'fedcba0987654321'   // CBC 必填 16 字节

const cipher = aesEncrypt('机密数据', key, iv)
const plain = aesDecrypt(cipher, key, iv)

aesEncrypt('data', key, null, { mode: 'ECB' })
aesEncrypt('data', key, iv, { output: 'hex' })
aesDecrypt(hexCipher, key, iv, { input: 'hex' })

默认 CBC + PKCS7 + Base64。options.padding 可设 'NONE'。与 Java AES/CBC/PKCS7Padding、Node aes-128-cbc 互通,key/iv 取值方式要和后端对齐。

编码

base64Encode('你好')
base64Decode('5L2g5aW9')
utf8Encode('abc')
bytesToHex(utf8Encode('hi'))

还有 bytesToBase64 / base64ToBytes、bytesToBase64Url / base64UrlToBytes、hexToBytes。

随机 / PKCE

randomString(6, '0123456789')
uuid()
const { codeVerifier, codeChallenge } = createPkce()  // 默认 64 位,范围 43~128

codeChallenge === sha256Base64Url(codeVerifier)。无 crypto.getRandomValues 的环境退化为 Math.random。

错误

参数不对会 throw Error,信息以 fz-utils: 开头。

隐私、权限声明

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

无

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

全部算法在本地纯 JS 计算,不发起任何网络请求,不上传任何数据。

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

无

许可协议

MIT协议