Skip to content

LimeCrypto 加密

一个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等)

文档链接

📚 组件详细文档请访问以下站点:

安装方法

  1. 在uni-app插件市场入口 中搜索并导入lime-crypto
  2. 非源码APP需要自定义基座
  3. 请先在页面上引入插件后再自定义基座

使用方法

js
import { useCrypto } from '@/uni_modules/lime-crypto'
const crypto = useCrypto()

使用示例

MD5哈希

js
// 计算字符串的MD5哈希值
const md5Hash = crypto.MD5('Hello World').toString()
console.log('MD5:', md5Hash)
// 输出: MD5: b10a8db164e0754105b7a99be72e3fe5

SHA256哈希

js
// 计算字符串的SHA256哈希值
const sha256Hash = crypto.SHA256('Hello World').toString()
console.log('SHA256:', sha256Hash)
// 输出: SHA256: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

HMAC-SHA256签名

js
// 使用密钥对消息进行HMAC-SHA256签名
const key = 'secret-key'
const message = 'Message to sign'
const hmacSig = crypto.HmacSHA256(message, key).toString()
console.log('HMAC-SHA256:', hmacSig)

AES加密/解密

js
// 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加密/解密

js
// 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加密/解密

javascript
// 生成密钥对
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"

编码器使用

js
// 字符串转换为不同编码格式
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填充至块大小- 无法区分数据结尾和填充
- 可能跨平台不兼容

常见问题

  1. iOS普通授权下无法使用,需要源码版才行
  2. 鸿蒙Next普通授权下无法使用,需要源码版才行

支持与赞赏

如果你觉得本插件解决了你的问题,可以考虑支持作者:

支付宝赞助微信赞助

源代码

组件源码