1# 生成密钥(ArkTS) 2 3<!--Kit: Universal Keystore Kit--> 4<!--Subsystem: Security--> 5<!--Owner: @wutiantian-gitee--> 6<!--Designer: @HighLowWorld--> 7<!--Tester: @wxy1234564846--> 8<!--Adviser: @zengyawen--> 9 10以DH算法为例,生成随机密钥。具体的场景介绍及支持的算法规格,请参考[密钥生成支持的算法](huks-key-generation-overview.md#支持的算法)。 11 12> **注意:** 13> 密钥别名中禁止包含个人数据等敏感信息。 14 15## 开发步骤 16 171. 指定密钥别名,密钥别名命名规范参考[密钥生成介绍及算法规格](huks-key-generation-overview.md)。 18 192. 初始化密钥属性集。 20 - 通过[HuksParam](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksparam)封装密钥属性,搭配Array组成密钥属性集,并赋值给[HuksOptions](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksoptions)中的properties字段。 21 - 密钥属性集中必须包含[HuksKeyAlg](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukskeyalg)、[HuksKeySize](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukskeysize)、[HuksKeyPurpose](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukskeypurpose)属性,即必传TAG:HUKS_TAG_ALGORITHM、HUKS_TAG_PURPOSE、HUKS_TAG_KEY_SIZE。 22 23 > **注意:** 24 > 25 > 一个密钥只能有一类PURPOSE,并且生成密钥时指定的用途要与使用时的方式一致,否则会导致异常。 26 273. 调用[generateKeyItem](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksgeneratekeyitem9),传入密钥别名和密钥属性集,生成密钥。 28 29> **说明:** 30> 如果业务再次使用相同别名调用HUKS生成密钥,HUKS将生成新密钥并直接覆盖历史的密钥文件。 31 32```ts 33/* 以下以生成DH密钥为例 */ 34import { huks } from '@kit.UniversalKeystoreKit'; 35import { BusinessError } from "@kit.BasicServicesKit"; 36 37/* 1.确定密钥别名 */ 38let keyAlias = 'dh_key'; 39/* 2.初始化密钥属性集 */ 40let properties1: Array<huks.HuksParam> = [{ 41 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 42 value: huks.HuksKeyAlg.HUKS_ALG_DH 43 }, { 44 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 45 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE 46 }, { 47 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 48 value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_2048 49 } 50]; 51let huksOptions: huks.HuksOptions = { 52 properties: properties1, 53 inData: new Uint8Array(new Array()) 54} 55 56/* 3.生成密钥 */ 57async function generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions) { 58 console.info(`enter promise generateKeyItem`); 59 try { 60 await huks.generateKeyItem(keyAlias, huksOptions) 61 .then(() => { 62 console.info(`promise: generateKeyItem success`); 63 }).catch((error: BusinessError) => { 64 console.error(`promise: generateKeyItem failed, errCode : ${error.code}, errMag : ${error.message}`); 65 }); 66 } catch (error) { 67 console.error(`promise: generateKeyItem input arg invalid`); 68 } 69} 70 71async function TestGenKey() { 72 await generateKeyItem(keyAlias, huksOptions); 73} 74```