HarmonyOS鸿蒙Next中实现通用密钥管理功能示例代码

HarmonyOS鸿蒙Next中实现通用密钥管理功能示例代码

介绍

本示例展示了密钥管理,包括:密钥生成/销毁、密钥导入、密钥证明、密钥协商、密钥派生相关功能。以及秘钥使用,包括:加解密、签名/验签、访问控制相关功能。

实现通用密钥管理功能源码链接

效果预览

图片名称

使用说明

点击对应模式按钮即可展示结果。

实现思路

  1. 模拟加密场景,首先获取密钥别名、待加密的数据与加密算法参数配置,后调用initSession获取handle,调用finishSession获取加密后的密文。
export async function encryptData(data2Encrypt: string) {
  let encryptProperties = getAesGcmEncryptProperties();
  let options: huks.HuksOptions = {
    properties: encryptProperties,
    inData: stringToUint8Array(data2Encrypt)
  }
  await huks.initSession(keyAlias, options)
    .then((data) => {
      handle = data.handle;
    }).catch((error: Error) => {
      hilog.error(0xd000,'promise: init EncryptDataGcm failed, %{public}s',JSON.stringify(error))
    })
  await huks.finishSession(handle, options)
    .then((data) => {
      cipherData = data.outData as Uint8Array;
    }).catch((error: Error) => {
      hilog.error(0xd000,'promise: encrypt data failed, %{public}s',JSON.stringify(error))
    })
}
  1. 模拟解密场景,首先获取密钥别名、待解密的密文和解密算法参数配置,后调用initSession获取handle,调用finishSession获取解密后的数据。
export async function decryptDataImpl() {
  let result: string = '';
  let decryptOptions = getAesGcmDecryptProperties(cipherData)
  let options: huks.HuksOptions = {
    properties: decryptOptions,
    inData: cipherData.slice(0, cipherData.length-16)
  }
  await huks.initSession(keyAlias, options)
    .then((data) => {
      handle = data.handle;
    }).catch((error: Error) => {
      hilog.error(0xd000,'promise: init DecryptDataGcm failed, %{public}s',JSON.stringify(error))
    })
  await huks.finishSession(handle, options)
    .then((data) => {
      result =  uint8ArrayToString(data.outData as Uint8Array);
    }).catch((error: Error) => {
      hilog.error(0xd000,'promise: decrypt data failed, %{public}s',JSON.stringify(error))
    })
  return result;
}

更多关于HarmonyOS鸿蒙Next中实现通用密钥管理功能示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,通用密钥管理功能可以通过@ohos.security.cryptoFramework模块实现。以下是一个示例代码,展示了如何生成、存储和使用对称密钥。

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

async function generateAndStoreKey() {
  try {
    // 创建对称密钥生成器
    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
    
    // 生成对称密钥
    let symKey = await symKeyGenerator.generateSymKey();
    
    // 获取密钥的二进制数据
    let keyData = await symKey.getEncoded();
    
    // 存储密钥数据到系统密钥库
    let keyAlias = 'my_aes_key';
    let keyProperties = {
      alias: keyAlias,
      purpose: cryptoFramework.KeyPurpose.ENCRYPT | cryptoFramework.KeyPurpose.DECRYPT,
      blockMode: cryptoFramework.CryptoMode.CBC,
      padding: cryptoFramework.CryptoPadding.PKCS7,
      isKeyAccessibleAfterBiometricAuthentication: false
    };
    
    await cryptoFramework.keyManager.importKey(keyAlias, keyData, keyProperties);
    
    console.log('Key generated and stored successfully.');
  } catch (error) {
    console.error('Error in key generation or storage:', error);
  }
}

async function useStoredKey() {
  try {
    let keyAlias = 'my_aes_key';
    
    // 从系统密钥库中获取密钥
    let symKey = await cryptoFramework.keyManager.getKey(keyAlias);
    
    // 使用密钥进行加密操作
    let cipher = cryptoFramework.createCipher('AES256|CBC|PKCS7');
    await cipher.init(cryptoFramework.CryptoMode.ENCRYPT, symKey);
    
    let plainText = 'Hello, HarmonyOS!';
    let input = { data: new Uint8Array(plainText.split('').map(c => c.charCodeAt(0))) };
    let encrypted = await cipher.doFinal(input);
    
    console.log('Encrypted data:', encrypted.data);
  } catch (error) {
    console.error('Error in using stored key:', error);
  }
}

// 生成并存储密钥
generateAndStoreKey().then(() => {
  // 使用存储的密钥
  useStoredKey();
});

该代码展示了如何使用@ohos.security.cryptoFramework模块生成对称密钥、存储密钥到系统密钥库,以及使用存储的密钥进行加密操作。

更多关于HarmonyOS鸿蒙Next中实现通用密钥管理功能示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,通用密钥管理功能可以通过security.keyChain模块实现。以下是一个简单的示例代码,展示如何生成、存储和获取密钥:

import ohos.security.keyChain.*;

public class KeyManagementExample {
    public static void main(String[] args) {
        try {
            // 创建密钥生成器
            KeyChain keyChain = KeyChain.getInstance();

            // 生成密钥对
            KeyPair keyPair = keyChain.generateKeyPair("RSA", 2048);

            // 存储密钥
            keyChain.storeKeyPair("myKeyAlias", keyPair);

            // 获取密钥
            KeyPair retrievedKeyPair = keyChain.getKeyPair("myKeyAlias");

            System.out.println("Key retrieved successfully!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

此代码展示了如何生成RSA密钥对、存储到密钥链中,并再次获取该密钥对。

回到顶部