• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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```