更新记录

0.0.3(2025-03-31)

  • feat : 增加AES 加密/解密

0.0.2(2025-03-21)

  • feat : 增加HmacSHA256加密

0.0.1(2025-03-18)

查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.6.8,Android:支持,iOS:支持,HarmonyNext:不确定 × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

lime-crypto 加密

UTS版cryptoJs,暂时支持MD5、SHA1、SHA256、 SHA512、AES,兼容uniapp/uniappx

功能概述

本模块提供以下加密功能:

  • 哈希算法(MD5/SHA1/SHA256/SHA512)
  • HMAC-SHA256 签名
  • AES 对称加密(支持多种模式和填充方案)
  • 多种编码格式转换(UTF8/Hex/Base64等)

文档

crypto

安装

插件市场导入,非源码APP需要自定义基座。

使用

复制代码import { useCrypto } from '@/uni_modules/lime-crypto'
const crypto = useCrypto()

哈希算法

复制代码const message = "hello world";
const hash = crypto.MD5(message);
console.log("MD5结果:", hash.toString()); // 转16进制
console.log("MD5结果:", crypto.enc.Hex.stringify(hash)); // 转16进制

SHA系列

复制代码const sha1Hash = crypto.SHA1(message);
const sha256Hash = crypto.SHA256(message);
const sha512Hash = crypto.SHA512(message);

// 转Base64
console.log("sha1Hash:", crypto.enc.Base64.stringify(sha1Hash));
console.log("sha256Hash:", crypto.enc.Base64.stringify(sha256Hash));
console.log("sha512Hash:", crypto.enc.Base64.stringify(sha512Hash));

HMAC-SHA256

复制代码const secret = "mySecretKey";
const hmacHash = crypto.HmacSHA256(message, secret);
console.log("HMAC:", crypto.enc.Hex.stringify(hmacHash));

AES 加密/解密

加密

复制代码const plaintext = "敏感数据123";
const key = "16/24/32字节密钥"; // 根据AES类型选择长度

// 基础加密 (使用默认ECB模式+PKCS7填充)
const encrypted = crypto.AES.encrypt(plaintext, key);
console.log("加密结果(Hex):", crypto.enc.Hex.stringify(encrypted));

const encryptedCBC = crypto.AES.encrypt(
    plaintext, 
    crypto.enc.Utf8.parse(key), // 支持WordArray类型密钥
    {
        iv: crypto.enc.Utf8.parse("1234567890abcdef"),
        mode: crypto.mode.CBC,
        padding: crypto.pad.Pkcs7 
    }
);

解密

复制代码const ciphertextHex = "加密后的16进制字符串";
const ciphertext = crypto.enc.Hex.parse(ciphertextHex);

// 简单解密
const decrypted = crypto.AES.decrypt(ciphertext, key);
console.log("解密结果:", decrypted.toString(crypto.enc.Utf8));

// 带配置解密
const decryptedCBC = crypto.AES.decrypt(
    ciphertext,
    key,
    // 需使用加密时的相同配置
    {
        iv: crypto.enc.Utf8.parse("1234567890abcdef"),
        mode: crypto.mode.CBC,
        padding: crypto.pad.Pkcs7 
    } 
);

AES 加密模式

模式名称 描述 注意事项
CBC 密码块链模式,每个块依赖前一个块 - 必须提供16字节IV
- IV需唯一且随机
CFB 将块密码转为流密码,支持逐字节加密 - IV需随机且不可预测
- 错误传播影响后续数据
CTR 计数器模式,支持并行计算 - 计数器必须永不重复
- 需管理好nonce
CTRGladman 优化的CTR模式实现 - 非标准实现
- 可能与其他库不兼容
ECB 简单块加密,相同明文生成相同密文 - 不推荐正式使用
- 存在安全漏洞
OFB 输出反馈模式,错误不传播 - 需要完整IV
- 加密解密需严格同步

填充方式

填充名称 描述 注意事项
Pkcs7 填充字节值为填充长度(如缺3字节则填0x03) - 最通用方案
- 数据长度需为块大小整数倍
AnsiX923 末尾为填充长度,中间填0 - 部分旧系统不支持
Iso10126 末尾为填充长度,中间填随机值 - 已过时标准
- 慎用
Iso97971 使用比特填充方案 - 特殊位流场景专用
- 与其他库不兼容
NoPadding 无填充,APP端字符必须为16的整倍数 - 数据长度必须严格匹配块大小
ZeroPadding 用0x00填充至块大小 - 无法区分数据结尾和填充
- 可能跨平台不兼容

编码器 (ENC)

复制代码// 字符串与WordArray互转
const wordArray = crypto.enc.Utf8.parse("需要加密的内容"); // UTF8转二进制
const base64Str = crypto.enc.Base64.stringify(wordArray); // 转Base64

// 支持编码类型
crypto.enc.Hex        // 16进制
crypto.enc.Base64     // 标准Base64
crypto.enc.Base64url  // URL安全Base64
crypto.enc.Latin1     // Latin1编码

隐私、权限声明

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

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

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

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问