HarmonyOS Next 之使用AES实现对称加解密
2025-06-18 14:51:00
185次阅读
0个评论
概述
AES-GCM(高级加密标准-Galois/Counter Mode)是一种兼具加密和认证功能的对称加密算法。其在保证数据机密性的同时,通过生成认证标签提供完整性校验能力。适用于对安全要求较高的敏感数据传输场景,如支付凭证、生物特征等信息加密。
优势特性:
- 同时提供加密和认证功能
- 并行计算效率高
- 支持附加认证数据(AAD)
- 标准化程度高,安全性强
开发步骤
1. 生成对称密钥
使用cryptoFramework.createSymKeyGenerator创建AES密钥生成器,指定密钥长度为256位。
import cryptoFramework from '@ohos.security.cryptoFramework';
// 生成AES256密钥
async function generateAESKey(): Promise<cryptoFramework.SymKey> {
  try {
    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
    let symKey = await symKeyGenerator.generateSymKey();
    console.info('AES key generated successfully');
    return symKey;
  } catch (error) {
    console.error(`Key generation failed: ${error.code}, ${error.message}`);
    throw error;
  }
}
- 执行加密操作
通过createCipher创建GCM模式加密器,配置加密参数:
async function encryptData(
  symKey: cryptoFramework.SymKey,
  plainText: string
): Promise<{ cipherData: Uint8Array; iv: Uint8Array }> {
  try {
    let cipher = cryptoFramework.createCipher('AES256|GCM|PKCS7');
    
    // 设置加密参数
    let iv = new Uint8Array(12); // GCM推荐12字节IV
    window.crypto.getRandomValues(iv);
    let gcmParams = {
      algName: 'GcmParamsSpec',
      iv: iv,
      aad: new Uint8Array([]), // 可选附加认证数据
      authTagLen: 128 // 认证标签长度(bits)
    };
    await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams);
    // 执行加密
    let input: cryptoFramework.DataBlob = { data: new TextEncoder().encode(plainText) };
    let cipherData = await cipher.doFinal(input);
    console.info('Encryption successful');
    return { cipherData: cipherData.data, iv: iv };
  } catch (error) {
    console.error(`Encryption failed: ${error.code}, ${error.message}`);
    throw error;
  }
}
- 执行解密操作
使用相同的密钥和IV初始化解密器,处理密文数据:
async function decryptData(
  symKey: cryptoFramework.SymKey,
  cipherData: Uint8Array,
  iv: Uint8Array
): Promise<string> {
  try {
    let cipher = cryptoFramework.createCipher('AES256|GCM|PKCS7');
    
    // 配置与加密一致的参数
    let gcmParams = {
      algName: 'GcmParamsSpec',
      iv: iv,
      aad: new Uint8Array([]),
      authTagLen: 128
    };
    await cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams);
    // 执行解密
    let input: cryptoFramework.DataBlob = { data: cipherData };
    let plainData = await cipher.doFinal(input);
    return new TextDecoder().decode(plainData.data);
  } catch (error) {
    console.error(`Decryption failed: ${error.code}, ${error.message}`);
    throw error;
  }
}
完整示例调用
async function aesGcmDemo() {
  try {
    // 1. 生成密钥
    let symKey = await generateAESKey();
    
    // 2. 加密数据
    let plainText = 'HarmonyOS4.0 secret message';
    let { cipherData, iv } = await encryptData(symKey, plainText);
    
    // 3. 解密数据
    let decryptedText = await decryptData(symKey, cipherData, iv);
    console.info(`Decryption result: ${decryptedText === plainText}`);
  } catch (error) {
    console.error(`Process error: ${error.code}, ${error.message}`);
  }
}
00
- 0回答
- 0粉丝
- 1关注
相关话题
- harmony-utils之AES,AES加解密
- harmony-utils之RSA,RSA加解密
- harmony-utils之DES,DES加解密
- harmony-utils之SM2,SM2加解密
- harmony-utils之SM4,SM4加解密
- 开发者工具箱-鸿蒙AES加密解密开发笔记
- HarmonyOS Next 之各类动画实现详解
- 基于SM4的文件加密解密功能实现(ECB模式)
- 【HarmonyOS NEXT】鸿蒙使用ScanKit实现自定义扫码 (一)之业务流程和扫码
- 【HarmonyOS NEXT】鸿蒙使用ScanKit实现自定义扫码 (二)之解析相册图片二维码
- 59.Harmonyos NEXT 图片预览组件之PicturePreviewImage实现原理
- 62.Harmonyos NEXT 图片预览组件之工具类实现
- HarmonyOS Next 之状态管理AppStorage和持久化存储详解与使用案例
- 【HarmonyOS】应用推送使用个推SDK如何实现?
- 61.Harmonyos NEXT 图片预览组件之数据模型设计与实现

