更新记录
1.0.1(2025-03-24)
1.0.0(2025-02-08)
- 对称加密(双向加密)AES算法加密和解密
- 哈希加密(单向加密)MD5加密 SHA1加密 SHA256加密 SHA384加密 SHA512加密
平台兼容性
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 |