HarmonyOS Next 之使用AES实现对称加解密
2025-06-18 14:51:00
108次阅读
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关注
相关话题
- 开发者工具箱-鸿蒙AES加密解密开发笔记
- 基于SM4的文件加密解密功能实现(ECB模式)
- HarmonyOS Next 之各类动画实现详解
- HarmonyOS Next 之状态管理AppStorage和持久化存储详解与使用案例
- 59.Harmonyos NEXT 图片预览组件之PicturePreviewImage实现原理
- 62.Harmonyos NEXT 图片预览组件之工具类实现
- 【HarmonyOS】应用推送使用个推SDK如何实现?
- HarmonyOS Next 之-布局之弹性布局(Flex)
- 61.Harmonyos NEXT 图片预览组件之数据模型设计与实现
- 06 HarmonyOS Next性能优化之LazyForEach 列表渲染基础与实现详解 (一)
- 【HarmonyOS Next开发】Navigation使用
- 【HarmonyOS Next开发】:ListItemGroup使用
- HarmonyOS Next 之布局之栅格布局(GridRow/GridCol)
- HarmonyOS Next 之组件之自定义弹窗(CustomDialog)
- HarmonyOS Next 之布局之网格布局(Grid/GridItem)