更新记录

1.0.1(2025-03-24)

  • 重大调整兼容安卓,web,微信小程序三端

1.0.0(2025-02-08)

  • 对称加密(双向加密)AES算法加密和解密
  • 哈希加密(单向加密)MD5加密 SHA1加密 SHA256加密 SHA384加密 SHA512加密

平台兼容性

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

wui-crypto

插件介绍

  • 本插件无第三方依赖,所以标准基座即可运行,目前可以跨三端运行
  • 支持安卓5.0以上,鸿蒙暂不支持HarmonyNext,支持web和微信小程序
  • 本插件只针对新版uniappx环境下才能完美运行,因为旧版uniapp不知吃好多的UTS语言新特性
  • 还有因为旧版uniapp编译到微信小程序不支持安全随机数,所以放弃了对旧版uniapp的适配
  • wui-crypto加解密插件支持:哈希单向加密 和 对称双向加密
  • 哈希单向加密支持 MD5,SHA1,SHA256,SHA384,SHA512
  • 对称双向加密支持 AES因为它的算法特点,安全性高,效率高,灵活性好
  • AES应用场景 网络通信安全 数据存储加密 移动设备安全 物联网等
  • AES 生成随机密钥是利用每个端的安全随机数,在密钥生成过程中使用安全随机数至关重要,这主要是为了保证密钥的安全性、不可预测性和唯一性。
  • 具体使用请看下面插件使用章节

插件使用

/* 
 * 引入wui-crypto加密插件 
 * wuiCrypto对象包括了所用方法
 * SecretKey是密钥对象 不需要可以不引入
 */
import { wuiCrypto, SecretKey } from "@/uni_modules/wui-crypto";
export default {
    data(){},
    onReady(){
        //MD5单向加密
        let stringMD5 = wuiCrypto.MD5('123456789');
        console.log(stringMD5);

        //SHA1单向加密
        let stringSHA1 = wuiCrypto.SHA1('123456789');
        console.log(stringSHA1);

        //SHA256单向加密
        let stringSHA256 = wuiCrypto.SHA256('123456789');
        console.log(stringSHA256);

        //SHA384单向加密
        let stringSHA384 = wuiCrypto.SHA384('123456789');
        console.log(stringSHA384);

        //SHA512单向加密
        let stringSHA512 = wuiCrypto.SHA512('123456789');
        console.log(stringSHA512);

        //需要加密的明文
        let datast = "Hello! AES";
        //生成密钥128位。可以设置支持128,194,256 三种
        //回调函数的key参数就是SecretKey
        wuiCrypto.generaSecretKey(128, (key : SecretKey) => {
            if (key.keyBytes != 0) {
               let txt = wuiCrypto.encryAES(datast, key, 'CBC');
               console.log('加密后的密文:',txt);
               let cotxts = wuiCrypto.decryAES(txt, key, 'CBC');
               console.log('解密后的明文:',cotxts);              
            } else {
               console.log('密钥不合法');
            }
        })

    }
}

AES关于密钥SecretKey对象的密钥转换的相关方法的使用说明,方便密钥储存和密钥分发

    //回调函数的key参数就是SecretKey
    wuiCrypto.generaSecretKey(128, (key : SecretKey) => {
        if (key.keyBytes != 0) {
          // SecretKey对象包含了密钥和iv
          //将 SecretKey对象转换为十六进制字符串string
           let keyHex = key.toHex().keyHex;        
           console.log('密钥是',keyHex);          
           let ivHex = key.toHex().ivHex;
           console.log('iv是',ivHex);

          //将 SecretKey对象转换为 Uint8Array
            let keyUint8 = key.toUint8().keyUint8;
            console.log('keyUint8是',keyUint8);
            let ivUint8 = key.toUint8().ivUint8;
            console.log('keyUint8是',ivUint8);

          //加密和解密的两个方法传入密钥时支持的参数类型
            let datast = "Hello! AES";
          //直接传入字符串作为固定密钥
          //此加密方式省略了iv如果都加密轻度较高的情况下不建议这样使用
            let txt1 = wuiCrypto.encryAES(datast, '12345678123456781234567812345678', 'CBC');
            console.log(txt1);
            let cotxts1 = wuiCrypto.decryAES(txt1, '12345678123456781234567812345678', 'CBC');
            console.log(cotxts1);
          //直接传入数组作为固定密钥 末尾参数不传默认是ECB加密模式,可选'ECB','CBC','CFB','OFB','CTR'五种模式
          //此加密方式省略了iv如果都加密轻度较高的情况下不建议这样使用
            let txt1 = wuiCrypto.encryAES(datast, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
            console.log(txt1);
            let cotxts1 = wuiCrypto.decryAES(txt1, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
            console.log(cotxts1);
          //

        } else {
           console.log('密钥不合法');
        }
    })         

以下时crypto对象下的内置的所有方法介绍

方法名称 返回值 参数说明
MD5( input : string, ishx : false ) : string 返回MD5加密后的string内容 必须参数input需加密内容,可选参数ishx加密长度默认false以十六进制形式呈现true以原始哈希值呈现
SHA1( input : string, ishx : false ) : string 返回SHA1加密后的string内容 必须参数input需加密内容,可选参数ishx加密长度默认false以十六进制形式呈现true以原始哈希值呈现
SHA256( input : string, ishx : false ) : string 返回SHA256加密后的string内容 必须参数input需加密内容,可选参数ishx加密长度默认false以十六进制形式呈现true以原始哈希值呈现
SHA384( input : string, ishx : false ) : string 返回SHA384加密后的string内容 必须参数input需加密内容,可选参数ishx加密长度默认false以十六进制形式呈现true以原始哈希值呈现
SHA512( input : string, ishx : false ) : string 返回SHA512加密后的string内容 必须参数input需加密内容,可选参数ishx加密长度默认false以十六进制形式呈现true以原始哈希值呈现
generaSecretKey( param0 ,callback : (WordArr : SecretKey) => void)) 无返回值通过回调函数获取密钥 必须参数param0密钥长度,可选128位192位和256位
encryAES(input : string, secretKey : SecretKey, mode?: string) : string 返回AES加密后的string内容 必须参数input需加密内容,必须参数secretKey加解密的密钥 可选参数mode默认'ECB' 可选'ECB','CBC','CFB','OFB','CTR'五种模式
decryAES(input : string, secretKey : SecretKey, mode?: string) : string 返回AES解密后的string内容 必须参数input需解密内容,必须参数secretKey加解密的密钥 可选参数mode默认'ECB' 可选'ECB','CBC','CFB','OFB','CTR'五种模式
hexTokey(keyHex : string, ivHex : string) : SecretKey 返回密钥对象SecretKey 必须参数keyHex十六进制的字符串key,必须参数ivHex十六进制的字符串iv
uint8ToKey(keyUint8 : Uint8Array, ivUint8 : Uint8Array) : SecretKey 返回密钥对象SecretKey 必须参数keyUint8 符合key长度的Uint8Array,必须参数ivUint8符合iv 长度的Uint8Array key长度支持16,24,32 iv长度支持16
hexToByte(hexString : string) : Uint8Array 返回密钥对象Uint8Array 必须参数hexString十六进制的字符串,此方法用于十六进制字符串转成Uint8Array
byteToHex(byteArray : Uint8Array) : string 返回密钥对象string 必须参数byteArray任意长度的Uint8Array 此方法用于Uint8Array转成十六进制字符串
uint8ToArray(uint8Array : Uint8Array) : number[] 返回密钥对象 number[] 必须参数 Uint8Array 此方法用于Uint8Array转number[]
arrayToUint8(numberArray : number[]) : Uint8Array 返回密钥对象 Uint8Array 必须参数 number[] 此方法用于number[]转Uint8Array

隐私、权限声明

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

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

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

暂无用户评论。

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