HarmonyOS 鸿蒙Next eftool-加密组件-AESSync(二)
HarmonyOS 鸿蒙Next eftool-加密组件-AESSync(二)
<markdown _ngcontent-uay-c237="" class="markdownPreContainer">
大家好,本人是oh三方库eftool的作者,针对于最初开始的AES而言,均采用async/await 方法来操作,广大开发者提问最多的就是可不可以是同步操作,在API12中官方也是听劝的均新增了同步操作,故eftool也紧跟其后,接下来我们进入到eftool的同步加密组件AESSync的使用
本示例使用eftool版本为API12的1.2.1-rc.2版本
首选需要引入AESSync
import {
AESSync
} from '[@yunkss](/user/yunkss)/eftool'
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
使用
AESSync提供了更加灵活的操作方式 针对于生成秘钥方法,可以传入期望生成秘钥的类型,不传默认生成为base64格式,支持传入basea64/hex 针对于加密后的输出字符串 也支持传入输出字符串类型,支持传入basea64/hex 针对于解密传入的key同样支持传入utf8/base64/hex格式的,其中utf8指的是普通字符串
generateAESKey128 生成秘钥
let key128 = AESSync.generateAESKey128();
this.message = key128.getDataRow();
生成的返回对象为eftool中的OutDTO对象,key128.getDataRow()获取生成的128位AES秘钥,此时生成的秘钥为base64格式的
let key128Hex = AESSync.generateAESKey128(‘hex’);
此时生成的秘钥为128位hex格式
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
IV的生成
如果需要在鸿蒙端生成iv,eftool也提供了灵活的生成方式
let iv = RandomUtil.generateIV('utf8');
此时生成的为普通字符串格式的iv
let ivHex = RandomUtil.generateIV('hex');
此时生成的为hex格式的iv
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
encodeECB128 加密
let ecbEncode = AESSync.encodeECB128('测试AES-128-ECB加密~',keyHex.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,ecbEncode.getDataRow()获取加密后的内容,此处的base64表示传入128位key的类型为base64,支持utf8/base64/hex,加密后的结果不传格式此时默认生成的为base64格式
let ecbEncodeHex = AESSync.encodeECB128(‘测试AES-128-ECB加密~’,keyHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入128位key的格式为hex,期望加密后的输出格式为hex,支持hex/base64
let ecbEncodeBase64 = AESSync.encodeECB128(‘测试AES-128-ECB加密~’,keyHex.getDataRow(), ‘hex’);
此时’hex’表示传入128位key的格式为hex,期望加密后的输出格式不传默认为base64,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
decodeECB128 解密
let ecbDecode = AESSync.decodeECB128(ecbEncode.getDataRow(),keyHex.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,ecbDecode.getDataRow()获取解密后的内容,此处的base64表示传入128位key的类型为base64,支持utf8/base64/hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let ecbDecodeHex = AESSync.decodeECB128(ecbEncodeHex.getDataRow(),keyHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入128位key的格式为hex,待解密字符串格式为hex,支持hex/base64
let ecbDecodBase64 =AESSync.decodeECB128(ecbEncodeBase64.getDataRow(),keyHex.getDataRow(), ‘hex’);
此时’hex’表示传入128位key的格式为hex,待解密字符串格式不传默认为base64,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
encodeCBC128 加密
let encode = AESSync.encodeCBC128('测试AES-128-CBC加密~~~~',key128.getDataRow(), iv.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,通过encode.getDataRow()获取加密后的内容,此处的base64表示传入key和iv的类型为base64,支持utf8/base64/hex,加密后的结果不传格式此时默认生成的为base64格式
let encodeCBC128 =AESSync.encodeCBC128(‘测试AES-128-CBC加密~~~~’,key128Hex.getDataRow(), ivHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key和iv的格式为hex,期望加密后的输出格式为hex,支持hex/base64
let encodeCBC128 =AESSync.encodeCBC128(‘测试AES-128-CBC加密~~~~’,key128Hex.getDataRow(), ivHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key和iv的格式为hex,期望加密后的结果不传格式此时默认生成的为base64格式,支持hex/base64
let encode2 = AESSync.encodeCBC128(“测试AES外部传入key/iv加密~~~”,“TESTsdiloia20230”, “ass3[2K8%fw68sw7”, ‘utf8’);
此时’utf8’表示传入秘钥key和iv的格式为普通字符串utf8,期望加密后的结果不传格式此时默认生成的为base64格式,支持hex/base64
let encode2 =AESSync.encodeCBC128(“测试AES外部传入key/iv加密~~~”,“TESTsdiloia20230”, iv.getDataRow(), ‘utf8’, ‘hex’);
此时’utf8’, 'hex’表示传入秘钥key和iv的格式为普通字符串utf8,期望加密后的结果为hex格式,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
decodeCBC128 解密
let decode = AESSync.decodeCBC128(encodeCBC128.getDataRow(),key128.getDataRow(), iv.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,通过decode.getDataRow()获取解密后的内容,此处的base64表示传入key和iv的类型为base64,支持utf8/base64/hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let decode =AESSync.decodeCBC128(encodeCBC128.getDataRow(),key128Hex.getDataRow(), ivHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key和iv的格式为hex,待解密字符串格式为hex,支持hex/base64
let decodeCBC128 =AESSync.decodeCBC128(encodeCBC128.getDataRow(), key128Hex.getDataRow(), ivHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key和iv的格式为hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let decode2 = AESSync.decodeCBC128(encode2.getDataRow(),“TESTsdiloia20230”, “ass3[2K8%fw68sw7”, ‘utf8’);
此时’utf8’表示传入秘钥key和iv的格式为普通字符串utf8,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let decode2 = AESSync.decodeCBC128(encode2.getDataRow(),“TESTsdiloia20230”, iv.getDataRow(), ‘utf8’, ‘hex’);
此时’utf8’, 'hex’表示传入秘钥key和iv的格式为普通字符串utf8,待解密的结果为hex格式,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
通过本章内容,我们已经学会了AESSync的128位各种加解密,下一章节我们将学习AESSync的192位各种加解密
如果大家有新的需求,欢迎给eftool提出issueissue提交地址
</markdown>更多关于HarmonyOS 鸿蒙Next eftool-加密组件-AESSync(二)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html