1# 生成密钥(ArkTS) 2 3 4以生成DH密钥为例,生成随机密钥。具体的场景介绍及支持的算法规格,请参考[密钥生成支持的算法](huks-key-generation-overview.md#支持的算法)。 5 6 7## 开发步骤 8 91. 指定待生成的密钥别名keyAlias。 10 - 密钥别名的最大长度为64字节。 11 - 对于不同业务间生成的密钥,HUKS将基于业务身份信息进行存储路径隔离,不会因为和其他业务密钥同名导致冲突。 12 132. 初始化密钥属性集。通过[HuksParam](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksparam)封装密钥属性,搭配Array组成密钥属性集,并赋值给[HuksOptions](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksoptions)中的properties字段。 14 密钥属性集中必须包含[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。 15 163. 调用[huks.generateKeyItem](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksgeneratekeyitem9),传入密钥别名和密钥属性集,生成密钥。 17 18> **说明:** 19> 如果业务再次使用相同别名调用HUKS生成密钥,HUKS将生成新密钥并直接覆盖历史的密钥文件。 20 21 22```ts 23/* 以下以生成DH密钥为例 */ 24import huks from '@ohos.security.huks'; 25import { BusinessError } from '@ohos.base'; 26class HuksProperties { 27 tag: huks.HuksTag = huks.HuksTag.HUKS_TAG_ALGORITHM; 28 value: huks.HuksKeyAlg | huks.HuksKeySize | huks.HuksKeyPurpose | huks.HuksKeyDigest = huks.HuksKeyAlg.HUKS_ALG_ECC; 29} 30/* 1.确定密钥别名 */ 31let keyAlias = 'dh_key'; 32/* 2.初始化密钥属性集 */ 33let properties1: HuksProperties[] = [ 34 { 35 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 36 value: huks.HuksKeyAlg.HUKS_ALG_DH 37 }, 38 { 39 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 40 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE 41 }, 42 { 43 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 44 value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_2048 45 }, 46 { 47 tag: huks.HuksTag.HUKS_TAG_DIGEST, 48 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 49 } 50]; 51let huksOptions: huks.HuksOptions = { 52 properties: properties1, 53 inData: new Uint8Array(new Array()) 54} 55/* 3.生成密钥 */ 56function generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions){ 57 return new Promise<void>((resolve, reject) => { 58 try { 59 huks.generateKeyItem(keyAlias, huksOptions, (error, data) => { 60 if (error) { 61 reject(error); 62 } else { 63 resolve(data); 64 } 65 }); 66 } catch (error) { 67 throw (error as Error); 68 } 69 }); 70} 71async function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions) { 72 console.info(`enter promise generateKeyItem`); 73 try { 74 await generateKeyItem(keyAlias, huksOptions) 75 .then((data) => { 76 console.info(`promise: generateKeyItem success, data = ${JSON.stringify(data)}`); 77 }) 78 .catch((error: BusinessError) => { 79 console.error(`promise: generateKeyItem failed` + error); 80 }); 81 } catch (error) { 82 console.error(`promise: generateKeyItem input arg invalid` + error); 83 } 84} 85async function TestGenKey() { 86 await publicGenKeyFunc(keyAlias, huksOptions); 87} 88``` 89