HarmonyOS鸿蒙Next之使用AES实现对称加解密(ArkTS)

HarmonyOS鸿蒙Next之使用AES实现对称加解密(ArkTS)

概述

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;
  }
}

2. 执行加密操作

通过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;
  }
}

3. 执行解密操作

使用相同的密钥和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}`);
  }
}

更多关于HarmonyOS鸿蒙Next之使用AES实现对称加解密(ArkTS)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,使用AES实现对称加解密可以通过ArkTS语言进行。AES(高级加密标准)是一种对称加密算法,加密和解密使用相同的密钥。以下是一个简单的示例,展示如何在ArkTS中使用AES进行加解密。

首先,确保你已经导入了相关的加密库:

import crypto from '@ohos.security.crypto';

接下来,定义一个函数来生成AES密钥:

function generateAesKey(): Uint8Array {
    const keyGenParams: crypto.AesKeyGenParams = {
        name: 'AES',
        length: 256 // 256位密钥
    };
    const key = crypto.generateKey(keyGenParams);
    return key;
}

然后,定义一个函数来进行加密:

function encryptAes(plainText: string, key: Uint8Array): Uint8Array {
    const encryptParams: crypto.AesEncryptParams = {
        name: 'AES',
        iv: new Uint8Array(16) // 初始化向量
    };
    const encrypted = crypto.encrypt(encryptParams, key, new TextEncoder().encode(plainText));
    return encrypted;
}

最后,定义一个函数来进行解密:

function decryptAes(encrypted: Uint8Array, key: Uint8Array): string {
    const decryptParams: crypto.AesDecryptParams = {
        name: 'AES',
        iv: new Uint8Array(16) // 初始化向量
    };
    const decrypted = crypto.decrypt(decryptParams, key, encrypted);
    return new TextDecoder().decode(decrypted);
}

使用这些函数,你可以生成密钥、加密数据并解密数据:

const key = generateAesKey();
const plainText = 'Hello, HarmonyOS!';
const encrypted = encryptAes(plainText, key);
const decrypted = decryptAes(encrypted, key);

console.log('Original:', plainText);
console.log('Decrypted:', decrypted);

以上代码展示了如何在HarmonyOS鸿蒙Next中使用ArkTS实现AES对称加解密。

更多关于HarmonyOS鸿蒙Next之使用AES实现对称加解密(ArkTS)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用ArkTS实现AES对称加解密可以通过cryptoFramework模块完成。首先,创建Cipher实例并指定AES算法和模式(如AES/CBC/PKCS5)。然后,使用init方法初始化加密或解密操作,传入密钥和IV(初始化向量)。接着,调用update方法处理数据,最后使用doFinal完成加解密。确保密钥和IV长度符合AES要求(如128位、192位或256位)。示例代码可参考官方文档,确保安全性和正确性。

回到顶部