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业务需要获取持久化存储的非对称密钥的公钥时使用,当前支持ECC/RSA/ED25519/X25519/SM2的公钥导出。 11>**说明:** 12> <!--RP1-->轻量级设备<!--RP1End-->仅支持RSA公钥导出。 13 14## 开发步骤 15 161. 指定密钥别名,密钥别名命名规范参考[密钥生成介绍及算法规格](huks-key-generation-overview.md)。 17 182. 调用接口[exportKeyItem](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksexportkeyitem9),传入参数keyAlias和options。options为预留参数,当前可传入空。 19 203. 返回值为[HuksReturnResult](../../reference/apis-universal-keystore-kit/js-apis-huks.md#huksreturnresult9)类型对象,获取的公钥明文在outData字段中,以标准的X.509规范的DER格式封装,具体请参考[公钥材料格式](huks-concepts.md#公钥材料格式)。 21 22```ts 23import { huks } from '@kit.UniversalKeystoreKit'; 24import { BusinessError } from "@kit.BasicServicesKit"; 25 26function Uint8ArrayToString(fileData: Uint8Array) { 27 let dataString = ''; 28 for (let i = 0; i < fileData.length; i++) { 29 dataString += String.fromCharCode(fileData[i]); 30 } 31 return dataString; 32} 33 34/* 1. 设置密钥别名 */ 35let keyAlias = 'keyAlias'; 36/* option对象传空 */ 37let emptyOptions: huks.HuksOptions = { 38 properties: [] 39}; 40/* 2. 设置密钥属性 */ 41let properties1: huks.HuksParam[] = [{ 42 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 43 value: huks.HuksKeyAlg.HUKS_ALG_DH 44 }, { 45 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 46 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE 47 }, { 48 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 49 value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_2048 50 } 51]; 52let huksOptions: huks.HuksOptions = { 53 properties: properties1, 54 inData: new Uint8Array([]) 55} 56 57/* 3.生成密钥 */ 58async function generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions): Promise<boolean> { 59 console.info(`enter promise generateKeyItem`); 60 let ret: boolean = false; 61 try { 62 await huks.generateKeyItem(keyAlias, huksOptions) 63 .then(() => { 64 console.info(`promise: generateKeyItem success`); 65 ret = true; 66 }).catch((error: BusinessError) => { 67 console.error(`promise: generateKeyItem failed, errCode : ${error.code}, errMag : ${error.message}`); 68 }); 69 } catch (error) { 70 console.error(`promise: generateKeyItem input arg invalid`); 71 } 72 return ret; 73} 74 75/* 4.导出密钥 */ 76async function exportKeyItem(keyAlias: string, emptyOptions: huks.HuksOptions): Promise<boolean> { 77 console.info(`enter promise exportKeyItem`); 78 let ret: boolean = false; 79 try { 80 await huks.exportKeyItem(keyAlias, emptyOptions) 81 .then((data) => { 82 console.info(`promise: exportKeyItem success, data is ` + Uint8ArrayToString(data.outData as Uint8Array)); 83 ret = true; 84 }).catch((error: BusinessError) => { 85 console.error(`promise: exportKeyItem failed, errCode : ${error.code}, errMag : ${error.message}`); 86 }); 87 } catch (error) { 88 console.error(`promise: exportKeyItem input arg invalid`); 89 } 90 return ret; 91} 92 93async function testExportKeyItem() { 94 let retGen = await generateKeyItem(keyAlias, huksOptions); 95 if (retGen == false) { 96 console.error(`generateKeyItem failed`); 97 return; 98 } 99 100 let retExp = await exportKeyItem(keyAlias, emptyOptions); 101 if (retExp == false) { 102 console.error(`exportKeyItem failed`); 103 return; 104 } 105 console.info(`testExportKeyItem success`); 106} 107```