HarmonyOS 鸿蒙Next eftool-加密组件-AESSync(二)

发布于 1周前 作者 caililin 来自 鸿蒙OS

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>
1 回复

针对HarmonyOS鸿蒙系统中的eftool-加密组件-AESSync(二)部分,首先确认你已正确安装并配置了HarmonyOS SDK及相关依赖。AES加密同步通常涉及密钥管理、加密模式(如CBC、ECB)及填充方式(如PKCS7)。检查你的代码中密钥生成、初始化向量(IV)的设置及加密模式是否与预期一致。同时,确保数据输入和输出处理正确,特别是数据块大小与加密模式匹配。此外,验证是否所有调用都正确处理了异常和错误。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部