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