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 10HUKS提供了接口供应用查询指定密钥是否存在。 11 12## 开发步骤 13 141. 指定密钥别名,密钥别名命名规范参考[密钥生成介绍及算法规格](huks-key-generation-overview.md)。 15 162. 初始化密钥属性集。用于查询时指定[密钥的属性TAG](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukstag),当查询单个密钥时,TAG字段可传空。 17 183. 调用接口[hasKeyItem](../../reference/apis-universal-keystore-kit/js-apis-huks.md#hukshaskeyitem11),查询密钥是否存在。 19 20```ts 21import { huks } from '@kit.UniversalKeystoreKit'; 22import { BusinessError } from "@kit.BasicServicesKit"; 23 24/* 1.确定密钥别名 */ 25let keyAlias = 'test_key'; 26let isKeyExist: boolean; 27/* 2.构造空对象 */ 28let huksOptions: huks.HuksOptions = { 29 properties: [] 30} 31/* 3.初始化密钥属性集 */ 32let generateProperties: huks.HuksParam[] = [{ 33 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 34 value: huks.HuksKeyAlg.HUKS_ALG_DH 35 }, { 36 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 37 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE 38 }, { 39 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 40 value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_2048 41 } 42]; 43let generateHuksOptions: huks.HuksOptions = { 44 properties: generateProperties, 45 inData: new Uint8Array([]) 46} 47 48/* 4.生成密钥 */ 49async function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions): Promise<boolean> { 50 console.info(`enter promise generateKeyItem`); 51 let ret: boolean = false; 52 try { 53 await huks.generateKeyItem(keyAlias, huksOptions) 54 .then(() => { 55 console.info(`promise: generateKeyItem success`); 56 ret = true; 57 }).catch((error: BusinessError) => { 58 console.error(`promise: generateKeyItem failed, errCode : ${error.code}, errMag : ${error.message}`); 59 }); 60 } catch (error) { 61 console.error(`promise: generateKeyItem input arg invalid`); 62 } 63 return ret; 64} 65 66/* 5.查询密钥是否存在 */ 67async function hasKeyItem(keyAlias: string, huksOptions: huks.HuksOptions): Promise<boolean> { 68 console.info(`enter promise hasKeyItem`); 69 let ret: boolean = false; 70 try { 71 await huks.hasKeyItem(keyAlias, huksOptions) 72 .then((data) => { 73 console.info(`promise: hasKeyItem success, data = ${data}`); 74 ret = true; 75 }).catch((error: BusinessError) => { 76 console.error(`promise: hasKeyItem failed, errCode : ${error.code}, errMag : ${error.message}`); 77 }); 78 return ret; 79 } catch (error) { 80 console.error(`promise: hasKeyItem input arg invalid, errCode : ${error.code}, errMag : ${error.message}`); 81 } 82 83 return ret; 84} 85 86async function testKeyExist() { 87 /* 1.生成密钥 */ 88 let genResult = await publicGenKeyFunc(keyAlias, generateHuksOptions); 89 /* 2.判断密钥是否存在 */ 90 if (genResult == true) { 91 isKeyExist = await hasKeyItem(keyAlias, huksOptions); 92 console.info(`hasKeyItem success, isKeyExist = ${isKeyExist}`); 93 } else { 94 console.error('Key generation failed, skipping query'); 95 } 96} 97```