鸿蒙Next ArkTS中如何实现AES加密
在鸿蒙Next中使用ArkTS开发时,如何实现AES加解密功能?需要具体代码示例说明密钥生成、加密模式选择(如CBC/ECB)以及数据填充方式的实现方法。官方文档中相关API不够清晰,能否提供完整的使用流程?
2 回复
在ArkTS中实现AES加密?简单!用@ohos.security.crypto模块的cryptoFramework,创建Cipher实例,选AES模式(比如GCM),设置密钥和参数,调用doFinal加密数据就行。记得处理异常,别让密钥裸奔哦~
更多关于鸿蒙Next ArkTS中如何实现AES加密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next的ArkTS中,可以使用系统提供的cryptoFramework模块实现AES加密。以下是完整的示例代码:
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
// AES加密函数
async function aesEncrypt(plainText: string, key: string, iv: string): Promise<Uint8Array> {
try {
// 1. 创建对称密钥生成器
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
// 2. 将字符串密钥转换为DataBlob
let keyData = { data: stringToUint8Array(key) };
let ivData = { data: stringToUint8Array(iv) };
// 3. 生成对称密钥
let symKey = await symKeyGenerator.convertKey(keyData);
// 4. 创建加密器
let cipher = cryptoFramework.createCipher('AES128|CBC|PKCS7');
// 5. 初始化加密器
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ivData);
// 6. 执行加密
let inputData = { data: stringToUint8Array(plainText) };
let encryptData = await cipher.doFinal(inputData);
return encryptData.data;
} catch (error) {
console.error('AES加密失败:', error);
throw error;
}
}
// 辅助函数:字符串转Uint8Array
function stringToUint8Array(str: string): Uint8Array {
let encoder = new TextEncoder();
return encoder.encode(str);
}
// 使用示例
async function example() {
let plainText = 'Hello, HarmonyOS!';
let key = '1234567890123456'; // 16字节密钥
let iv = 'abcdefghijklmnop'; // 16字节初始向量
try {
let encryptedData = await aesEncrypt(plainText, key, iv);
console.log('加密结果:', Array.from(encryptedData));
} catch (error) {
console.error('加密过程出错:', error);
}
}
关键参数说明:
- 密钥长度:示例使用AES128(16字节),也可用AES192(24字节)或AES256(32字节)
- 工作模式:CBC模式需要IV(初始向量)
- 填充模式:PKCS7是常用填充方式
注意事项:
- 密钥和IV必须是正确长度的字符串
- 加解密需要使用相同的密钥和IV
- 实际使用时建议将加密结果转换为Base64便于传输
记得在项目的module.json5中添加相应权限:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.CRYPTO"
}
]
}
}

