更新记录
0.1.8(2025-08-03)
- feat:
HmacSHA256
和HmacSHA1
的key
改为联合类型string|WordArray
0.1.7(2025-07-22)
- feat: 增加RSA
0.1.6(2025-07-17)
- feat : 增加DES
平台兼容性
云端兼容性
阿里云 | 腾讯云 | 支付宝云 |
---|---|---|
√ | √ | √ |
uni-app(4.44)
Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | 5.0 | √ | √ |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | - | √ | √ | - | - |
uni-app x(4.61)
Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
---|---|---|---|---|---|
√ | √ | 5.0 | √ | √ | √ |
lime-crypto 加密
一个UTS版的cryptoJs加密库,支持MD5、SHA1、SHA256、SHA512、AES、DES等加密算法,兼容uniapp/uniappx(iOS、Web、Android、鸿蒙、小程序)。
功能概述
本模块提供以下加密功能:
- 哈希算法(MD5/SHA1/SHA256/SHA512)
- HMAC-SHA256/HMAC-SHA1 签名
- AES 对称加密(支持多种模式和填充方案)
- DES 对称加密
- RSA 非对称加密,密钥对生成(2048位
- 多种编码格式转换(UTF8/Hex/Base64等)
文档链接
📚 组件详细文档请访问以下站点:
安装方法
- 在uni-app插件市场中搜索并导入
lime-crypto
- 非源码APP需要自定义基座
- 请先在页面上引入插件后再自定义基座
使用方法
import { useCrypto } from '@/uni_modules/lime-crypto'
const crypto = useCrypto()
使用示例
MD5哈希
// 计算字符串的MD5哈希值
const md5Hash = crypto.MD5('Hello World').toString()
console.log('MD5:', md5Hash)
// 输出: MD5: b10a8db164e0754105b7a99be72e3fe5
SHA256哈希
// 计算字符串的SHA256哈希值
const sha256Hash = crypto.SHA256('Hello World').toString()
console.log('SHA256:', sha256Hash)
// 输出: SHA256: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
HMAC-SHA256签名
// 使用密钥对消息进行HMAC-SHA256签名
const key = 'secret-key'
const message = 'Message to sign'
const hmacSig = crypto.HmacSHA256(message, key).toString()
console.log('HMAC-SHA256:', hmacSig)
AES加密/解密
// AES加密(CBC模式)
const key = 'my-secret-key-123'
const iv = crypto.lib.WordArray.random(16) // 生成随机IV
const plaintext = 'Secret message to encrypt'
// 加密
const encrypted = crypto.AES.encrypt(plaintext, key, {
iv: iv,
mode: crypto.mode.CBC,
padding: crypto.pad.Pkcs7
})
const ciphertext = encrypted.toString()
console.log('加密结果:', ciphertext)
// 解密
const decrypted = crypto.AES.decrypt(ciphertext, key, {
iv: iv,
mode: crypto.mode.CBC,
padding: crypto.pad.Pkcs7
})
const decryptedText = decrypted.toString(crypto.enc.Utf8)
console.log('解密结果:', decryptedText)
DES加密/解密
// DES加密
const key = 'password'
const plaintext = 'Message to encrypt'
const encrypted = crypto.DES.encrypt(plaintext, key).toString()
console.log('DES加密:', encrypted)
const decrypted = crypto.DES.decrypt(encrypted, key).toString(crypto.enc.Utf8)
console.log('DES解密:', decrypted)
RSA加密/解密
// 生成密钥对
const rsaKeys = crypto.RSA.generateKeyPair();
// 设置公钥
crypto.RSA.setPublicKey(rsaKeys.publicKey);
// 加密短数据
const shortData = 'Hello RSA';
const rsaEncrypted = crypto.RSA.encrypt(shortData);
console.log('加密结果:', rsaEncrypted);
// 设置私钥
crypto.RSA.setPrivateKey(rsaKeys.privateKey);
// 解密
const rsaDecrypted = crypto.RSA.decrypt(rsaEncrypted);
console.log('解密结果:', rsaDecrypted); // 应该输出 "Hello RSA"
编码器使用
// 字符串转换为不同编码格式
const text = 'Hello World'
const wordArray = crypto.enc.Utf8.parse(text)
// 转换为Base64
const base64 = crypto.enc.Base64.stringify(wordArray)
console.log('Base64:', base64) // SGVsbG8gV29ybGQ=
// 转换为Hex(16进制)
const hex = crypto.enc.Hex.stringify(wordArray)
console.log('Hex:', hex) // 48656c6c6f20576f726c64
// 从Base64解析回字符串
const parsedText = crypto.enc.Base64.parse(base64)
const originalText = parsedText.toString(crypto.enc.Utf8)
console.log('原文:', originalText) // Hello World
功能特点
哈希算法
- 支持MD5、SHA1、SHA256、SHA512等哈希算法
- 支持HMAC-SHA256和HMAC-SHA1签名
AES加密/解密
- 支持多种加密模式:CBC、CFB、CTR、CTRGladman、ECB、OFB
- 支持多种填充方式:Pkcs7、AnsiX923、Iso10126、Iso97971、NoPadding、ZeroPadding
DES加密/解密
- 与AES类似的API和使用方法
编码器
- 支持多种编码格式:Hex(16进制)、Base64、Base64url、Latin1、UTF8等
- 支持字符串与WordArray的相互转换
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填充至块大小 | - 无法区分数据结尾和填充 - 可能跨平台不兼容 |
常见问题
- iOS普通授权下无法使用,需要源码版才行
- 鸿蒙Next普通授权下无法使用,需要源码版才行
支持与赞赏
如果你觉得本插件解决了你的问题,可以考虑支持作者: | 支付宝赞助 | 微信赞助 |
---|---|---|
![]() |
![]() |