HarmonyOS 鸿蒙Next eftool-加密组件-AESSync(一)
HarmonyOS 鸿蒙Next eftool-加密组件-AESSync(一)
<markdown _ngcontent-axi-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指的是普通字符串
generateAESKey 生成秘钥
let key = AESSync.generateAESKey();
this.message = key.getDataRow();
生成的返回对象为eftool中的OutDTO对象,key.getDataRow()获取生成的AES秘钥,此时生成的秘钥为base64格式的
let keyHex = AESSync.generateAESKey(‘hex’);
此时生成的秘钥为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>
encodeGCM 加密
let gcmEncode = AESSync.encodeGCM('测试AES-GCM加密~~~~',key.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,gcmEncode.getDataRow()获取加密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,加密后的结果不传格式此时默认生成的为base64格式
let gcmEncode = AESSync.encodeGCM('测试AES-GCM加密~~~~,key.getDataRow().publicKey, ‘base64’, ‘hex’);
此时’base64’, 'hex’表示传入秘钥key的格式为base64,期望加密后的输出格式为hex,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
decodeGCM 解密
let gcmDecode = AESSync.decodeGCM(gcmEncode.getDataRow(),key.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,gcmDecode.getDataRow()获取解密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let gcmDecode = AESSync.decodeGCM(gcmDecode.getDataRow(),key.getDataRow(), ‘base64’, ‘hex’);
此时’base64’, 'hex’表示传入秘钥key的格式为base64,待解密字符串格式为hex,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
encodeECB 加密
let ecbEncode = AESSync.encodeECB('测试AES-ECB加密~',keyHex.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,ecbEncode.getDataRow()获取加密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,加密后的结果不传格式此时默认生成的为base64格式
let ecbEncodeHex = AESSync.encodeECB(‘测试AES-ECB加密~’,keyHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key的格式为hex,期望加密后的输出格式为hex,支持hex/base64
let ecbEncodeBase64 = AESSync.encodeECB(‘测试AES-ECB加密~’,keyHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key的格式为hex,期望加密后的输出格式不传默认为base64,支持hex/base64
let encode1 = AESSync.encodeECB(‘测试AES外部传入key加密~~~~’,‘4eS1Q15z1@TFTe%eEf23fGFZf)2Rs588’, ‘utf8’);
此时’utf8’表示传入秘钥key的格式为普通字符串utf8格式,期望加密后的输出格式不传默认为base64,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
decodeECB 解密
let ecbDecode = AESSync.decodeECB(ecbEncode.getDataRow(),keyHex.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,ecbDecode.getDataRow()获取解密后的内容,此处的base64表示传入key的类型为base64,支持utf8/base64/hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let ecbDecodeHex = AESSync.decodeECB(ecbEncodeHex.getDataRow(),keyHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key的格式为hex,待解密字符串格式为hex,支持hex/base64
let ecbDecodBase64 = AESSync.decodeECB(ecbEncodeBase64.getDataRow(),keyHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key的格式为hex,待解密字符串格式不传默认为base64,支持hex/base64
let decode1 = AESSync.decodeECB(encode1.getDataRow(), ‘4eS1Q15z1@TFTe%eEf23fGFZf)2Rs588’, ‘utf8’);
此时’utf8’表示传入秘钥key的格式为普通字符串utf8,待解密字符串格式不传默认为base64,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
encodeCBC 加密
let encode = AESSync.encodeCBC('测试AES-CBC加密~~~~', key.getDataRow(), iv.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,通过encode.getDataRow()获取加密后的内容,此处的base64表示传入key和iv的类型为base64,支持utf8/base64/hex,加密后的结果不传格式此时默认生成的为base64格式
let encodeHex = AESSync.encodeCBC(‘测试AES-CBC加密~~~~’,keyHex.getDataRow(), ivHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key和iv的格式为hex,期望加密后的输出格式为hex,支持hex/base64
let encodeBase64 = AESSync.encodeCBC(‘测试AES-CBC加密~~~~’,keyHex.getDataRow(), ivHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key和iv的格式为hex,期望加密后的结果不传格式此时默认生成的为base64格式,支持hex/base64
let encode2 = AESSync.encodeCBC(“测试AES外部传入key/iv加密~~~”, “TESTsdiloia20230ass3[2K8%fw68sw7”,“ass3[2K8%fw68sw7”, ‘utf8’);
此时’utf8’表示传入秘钥key和iv的格式为普通字符串utf8,期望加密后的结果不传格式此时默认生成的为base64格式,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
decodeCBC 解密
let decode = AESSync.decodeCBC(encode.getDataRow(), key.getDataRow(), iv.getDataRow(), 'base64');
生成的返回对象为eftool中的OutDTO对象,通过decode.getDataRow()获取解密后的内容,此处的base64表示传入key和iv的类型为base64,支持utf8/base64/hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let decodeHex = AESSync.decodeCBC(encodeHex.getDataRow(),keyHex.getDataRow(), ivHex.getDataRow(), ‘hex’, ‘hex’);
此时’hex’, 'hex’表示传入秘钥key和iv的格式为hex,待解密字符串格式为hex,支持hex/base64
let decodeBase64 = AESSync.decodeCBC(encodeBase64.getDataRow(), keyHex.getDataRow(), ivHex.getDataRow(), ‘hex’);
此时’hex’表示传入秘钥key和iv的格式为hex,待解密的结果不传格式此时默认为base64格式,支持hex/base64
let decode2 = AESSync.decodeCBC(encode2.getDataRow(), “TESTsdiloia20230ass3[2K8%fw68sw7”, “ass3[2K8%fw68sw7”, ‘utf8’);
此时’utf8’表示传入秘钥key和iv的格式为普通字符串utf8,待解密的结果不传格式此时默认为base64格式,支持hex/base64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
通过本章内容,我们已经学会了AESSync的256位各种加解密,下一章节我们将学习AESSync的128位各种加解密
如果大家有新的需求,欢迎给eftool提出issueissue提交地址
</markdown>针对HarmonyOS(鸿蒙)系统中的Next eftool加密组件AESSync的问题,首先需要确认您是否已正确安装并配置了所有必要的依赖库和开发环境。检查AESSync组件的文档,确保API调用和参数设置符合规范。此外,验证加密密钥和初始化向量(IV)是否正确无误,且符合AES加密标准。如果问题涉及具体错误代码或行为异常,请查阅鸿蒙开发者文档中的错误处理部分。如果问题依旧没法解决请加我微信,我的微信是itying888。