更新记录

1.0.4(2024-06-12)

  • 修复 app-jsweb 平台密钥默认规则遗漏的bug。
  • 修复其他已知问题。

1.0.3(2024-05-30)

  • 修复安卓部分 hash 转换时丢失一位的bug。

1.0.2(2024-05-28)

  • 修复一些已知问题。
查看更多

平台兼容性

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

kux-crypto

kux-crypto 插件是根据 CryptoJS 设计实现的一个标准和安全加密算法的插件。

提示

目前因 uts 插件 仅支持 app-android/app-ios 的原生加密,所以如果是安卓之外的环境使用场景请选择 源码授权 方式使用!!!

插件特色

  • 多端同步迭代支持
  • CryptoJS 一致的用法
  • 支持多种主流加密算法
  • 提供完善的demo演示
  • 多端一致的API设计

安装配置

插件市场下载插件后,直接像下面示例导入初始化即可

import { useCrypto } from '@/uni_modules/kux-crypto';

const kuxCrypto = useCrypto();

使用方法

提示

  • 目前仅支持输入输出UTF8编码的字符串参数。
  • 下面示例代码的类型需要手动从 @/uni_modules/kux-crypto/utssdk/interface 导入使用。
  • 下面示例代码的 kuxCrypto 为上面安装配置步骤初始化后的变量。

Hashing

MD5

MD5 是一种广泛使用的哈希函数。它已被用于各种安全应用程序,也常用于检查文件的完整性。但是,MD5 不具有抗冲突性,并且不适用于依赖于此属性的 SSL 证书或数字签名等应用程序。

const hash = kuxCrypto.MD5("Message");

SHA-1

SHA-1 是现有 SHA 哈希函数中最成熟的,它用于各种安全应用程序和协议。不过,随着新攻击的发现或改进,SHA-1的抗碰撞能力一直在减弱。

const hash = kuxCrypto.SHA1("Message");

SHA-2

SHA-256 是 SHA-2 集中的四个变体之一。它不像 SHA-1 那样广泛使用,尽管它似乎提供了更好的安全性。

const hash = kuxCrypto.SHA256("Message");

SHA-512 与 SHA-256 基本相同,但对 64 位字节而不是 32 位字节进行操作。

const hash = kuxCrypto.SHA512("Message");

SHA-3

后面出现的新的哈希算法。

const hash = kuxCrypto.SHA3("Message");

SHA-3 可以配置为输出 224、256、384 或 512 位之一的哈希长度。默认值为 512 位。

let hash = kuxCrypto.SHA3("Message", { outputLength: 224 } as SHA3Cfg);
let hash = kuxCrypto.SHA3("Message", { outputLength: 256 } as SHA3Cfg);
let hash = kuxCrypto.SHA3("Message", { outputLength: 384 } as SHA3Cfg);

提示

因为原生安卓未提供该算法的实现,所以使用该算法时需要打包自定义基座。 IOS平台暂不支持。

RIPEMD-160

const hash = kuxCrypto.RIPEMD160("Message");

提示

因为原生安卓未提供该算法的实现,所以使用该算法时需要打包自定义基座。

Ciphers

密码算法

AES

支持 AES-128、AES-192 和 AES-256。它将根据您传入的密钥的大小来选择变体。如果使用密码,则它将生成一个 256 位密钥。

const encrypted = kuxCrypto.AES.encrypt("Message", "Secret Passphrase");

const decrypted = kuxCrypto.AES.decrypt(encrypted, "Secret Passphrase");

提示

  • 秘钥不足加密算法要求时插件会自动在末尾通过补齐 x 字符来达到 16 位、32位或者64位。
  • 秘钥长度超过64位时会自动截断来满足64位要求。

KuxCrypto 支持自定义选择加密模式(mode),支持如下:

  • CBC (默认)
  • CFB
  • CTR
  • OFB
  • ECB

加密模式选择可以通过 kuxCrypto.mode 属性获取,具体示例代码如下:

const encrypted = kuxCrypto.AES.encrypt("Message", "Secret Passphrase", {
    mode: kuxCrypto.mode.ECB
} as CipherOption);

kuxCrypto 支持自定义填充模式 (padding),支持如下:

  • Pkcs7 (默认)
  • Iso97971
  • AnsiX923 (仅限web)
  • Iso10126
  • ZeroPadding
  • NoPadding

可以通过 kuxCrypto.pad 属性获取,具体示例代码如下:

const encrypted = kuxCrypto.AES.encrypt("Message", "Secret Passphrase", {
    padding: kuxCrypto.pad.ZeroPadding
} as CipherOption);

提示

由于原生对填充模式的支持和web有差异,所以以上填充模式在原生上面插件做了兼容处理。

kuxCrypto 支持自定义偏移量,开发者可以通过 kuxCrypto.utils.random(16) 来自动生成符合要求的偏移量字符串。

const encrypted = kuxCrypto.AES.encrypt("Message", "Secret Passphrase", {
    iv: kuxCrypto.utils.random(16)
} as CipherOption);

提示

  • 偏移量建议填写自己的实际偏移量,目前插件提供的自动生成的没做安全处理。
  • 如果偏移量未填写会默认设置为秘钥内容做补充处理。
  • 如果是跨端加密解密场景强烈建议使用自己完整的偏移量。

偏移量在原生环境支持通过 ivEncoding 设置输入格式,支持如下:

  • hex:十六进制输入
  • base64:base64编码输入
const encrypted = kuxCrypto.AES.encrypt("Message", "Secret Passphrase", {
    ivEncoding: 'hex'
} as CipherOption);

提示

  • 输入格式要和实际输入的偏移量内容格式保持一致。

工具类方法

onError (callback: OnErrorCallback): void

捕获插件异常信息,如加密解密方法使用中出现的错误异常。


结语

kux 不生产代码,只做代码的搬运工,致力于提供uts 的 js 生态轮子实现,欢迎各位大佬在插件市场搜索使用 kux 生态插件:https://ext.dcloud.net.cn/search?q=kux

友情推荐

  • TMUI4.0:包含了核心的uts插件基类.和uvue组件库
  • GVIM即时通讯模版:GVIM即时通讯模版,基于uni-app x开发的一款即时通讯模版
  • t-uvue-ui:T-UVUE-UI是基于UNI-APP X开发的前端UI框架
  • UxFrame 低代码高性能UI框架:【F2图表、双滑块slider、炫酷效果tabbar、拖拽排序、日历拖拽选择、签名...】UniAppX 高质量UI库
  • wx-ui 基于uni-app x开发的高性能混合UI库:基于uni-app x开发的高性能混合UI库,集成 uts api 和 uts component,提供了一套完整、高效且易于使用的UI组件和API,让您以更少的时间成本,轻松完成高性能应用开发。
  • firstui-uvue:FirstUI(unix)组件库,一款适配 uni-app x 的轻量、简洁、高效、全面的移动端组件库。
  • easyXUI 不仅仅是UI 更是为UniApp X设计的电商模板库:easyX 不仅仅是UI库,更是一个轻量、可定制的UniAPP X电商业务模板库,可作为官方组件库的补充,始终坚持简单好用、易上手

隐私、权限声明

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

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

插件不采集任何数据

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

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