鸿蒙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是常用填充方式

注意事项:

  1. 密钥和IV必须是正确长度的字符串
  2. 加解密需要使用相同的密钥和IV
  3. 实际使用时建议将加密结果转换为Base64便于传输

记得在项目的module.json5中添加相应权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.CRYPTO"
      }
    ]
  }
}
回到顶部