更新记录
1.0.3(2025-06-20)
- 调整加密结果由原来的16进制字符串改为base64字符串
- 废弃hexTobyte方法 改为 hexToUint8方法
- 废弃byteToHex方法 改为 uint8oHex方法
- 新增hexToBase64方法 将 16进制字符串转为Base64字符串
- 新增base64ToHex方法 将 Base64字符串转为16进制字符串
1.0.2(2025-06-20)
调整加密结果由原来的16进制字符串改为base64字符串
废弃hexTobyte方法 改为 hexToUint8方法
废弃byteToHex方法 改为 uint8oHex方法
新增hexToBase64方法 将 16进制字符串转为Base64字符串
*新增base64ToHex方法 将 Base64字符串转为16进制字符串
1.0.1(2025-03-24)
查看更多
平台兼容性
uni-app x(4.61)
Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
4.0 |
× |
5.0 |
- |
- |
√ |
wui-crypto
插件介绍
- 本插件无第三方依赖,所以标准基座即可运行,目前可以跨三端运行
- 支持安卓5.0以上,鸿蒙暂不支持HarmonyNext,支持web和微信小程序
- 本插件只针对新版uniappx环境下才能完美运行,因为旧版uniapp不支持好多的UTS语言新特性
- 还有因为旧版uniapp编译到微信小程序不支持安全随机数,所以放弃了对旧版uniapp的适配
- wui-crypto加解密插件支持:哈希单向加密 和 对称双向加密
- 对称双向加密支持 AES因为它的算法特点,安全性高,效率高,灵活性好
- AES应用场景 网络通信安全 数据存储加密 移动设备安全 物联网等
- AES 生成随机密钥是利用每个端的安全随机数,在密钥生成过程中使用安全随机数至关重要,这主要是为了保证密钥的安全性、不可预测性和唯一性。
- 哈希单向加密支持 MD5,SHA1,SHA256,SHA384,SHA512
- 具体使用请看下面插件使用章节
插件使用
/*
* 引入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) {
// key : SecretKey对象包含了密钥和iv
//将 SecretKey对象转换为十六进制字符串string
let Hexobj = key.toHex();
console.log('密钥是',Hexobj.keyHex);
console.log('iv是',Hexobj.ivHex);
//将 SecretKey对象转换为Base64符串string
let base64obj = key.toBase64();
console.log('密钥是',base64obj.keyBase64);
console.log('iv是',base64obj.ivBase64);
//将 SecretKey对象转换为 Uint8Array
let uint8obj = key.toUint8();
console.log('keyUint8是',uint8obj.keyUint8);
console.log('keyUint8是',uint8obj.ivUint8);
//要加密的明文
let datast = "Hello! AES";
//加密和解密的两个方法传入密钥时支持的参数类型
//直接传入字符串作为固定密钥
//此加密方式省略了iv如果都加密轻度较高的情况下不建议这样使用,推荐使用以上安全随机密钥key
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如果都加密轻度较高的情况下不建议这样使用,推荐使用安全随机密钥key
let txt2 = wuiCrypto.encryAES(datast, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
console.log(txt2);
let cotxts2 = wuiCrypto.decryAES(txt2, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
console.log(cotxts2);
//实际加解密时没有必要把安全密钥做转换,提供各种类型的转换方法是为了在各种场景下更为方便的储存安全密钥。
//用直接生成的安全随机密钥key直接加解密即可。如下:
let txt3 = wuiCrypto.encryAES(datast, key);
console.log(txt3);
let cotxts3 = wuiCrypto.decryAES(txt3, key);
console.log(cotxts3);
} else {
console.log('密钥不合法');
}
})
以下时crypto对象下的内置的所有方法介绍
方法名称 |
返回值 |
参数说明 |
MD5( input : string, ishx : false ) : string |
返回MD5加密后的string内容 |
必须参数input需加密内容,可选参数ishx加密长度默认false以Base64形式呈现true以原始哈希值呈现 |
SHA1( input : string, ishx : false ) : string |
返回SHA1加密后的string内容 |
必须参数input需加密内容,可选参数ishx加密长度默认false以Base64制形式呈现true以原始哈希值呈现 |
SHA256( input : string, ishx : false ) : string |
返回SHA256加密后的string内容 |
必须参数input需加密内容,可选参数ishx加密长度默认false以Base64制形式呈现true以原始哈希值呈现 |
SHA384( input : string, ishx : false ) : string |
返回SHA384加密后的string内容 |
必须参数input需加密内容,可选参数ishx加密长度默认false以Base64制形式呈现true以原始哈希值呈现 |
SHA512( input : string, ishx : false ) : string |
返回SHA512加密后的string内容 |
必须参数input需加密内容,可选参数ishx加密长度默认false以Base64制形式呈现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 |
hexToUint8(hexString : string) : Uint8Array |
返回密钥对象Uint8Array |
必须参数hexString十六进制的字符串,此方法用于十六进制字符串转成Uint8Array |
uint8ToHex(uint8Array : Uint8Array) : string |
返回密钥对象string |
必须参数uint8Array任意长度的Uint8Array 此方法用于Uint8Array转成十六进制字符串 |
uint8ToArray(uint8Array : Uint8Array) : number[] |
返回密钥对象 number[] |
必须参数 Uint8Array 此方法用于Uint8Array转number[] |
arrayToUint8(numberArray : number[]) : Uint8Array |
返回密钥对象 Uint8Array |
必须参数 number[] 此方法用于number[]转Uint8Array |
以下时SecretKey对象下的内置的所有方法介绍
将16进制字符串转字节数组 Uint8Array
hexToUint8(str : string) : Uint8Array
将字节数组 转16进制字符string
uint8ToHex(uint8Array : Uint8Array): string
将16进制字符串转换为Base64编码
hexToBase64(hexString : string) : string
base64转16进制字符串
base64ToHex(base64String : string): string
将 SecretKey对象转换为base64字符串string
toBase64() : keyStringBase64
将 SecretKey对象转换为十六进制字符串string
toHex() : keyStringType
将 SecretKey 对象转换为 Uint8Array 字节数组
toUint8() : keyUint8Type
将两个十六进制字符串key和iv转换为 SecretKey 对象
hexTokey(keyStr : string, ivStr : string) : SecretKey
将两个Uint8Array类型的 key和iv转换为 SecretKey 对象
uint8ToKey(keyUint8 : Uint8Array, ivUint8 : Uint8Array) : SecretKey