1# 随机生成非对称密钥对(ArkTS) 2 3<!--Kit: Crypto Architecture Kit--> 4<!--Subsystem: Security--> 5<!--Owner: @zxz--3--> 6<!--Designer: @lanming--> 7<!--Tester: @PAFT--> 8<!--Adviser: @zengyawen--> 9 10以RSA和SM2为例,随机生成非对称密钥对(KeyPair),并获得二进制数据。 11 12非对称密钥对可用于后续加解密等操作,二进制数据可用于存储或运输。 13 14## 随机生成RSA密钥对 15 16对应的算法规格请查看[非对称密钥生成和转换规格:RSA](crypto-asym-key-generation-conversion-spec.md#rsa)。 17 181. 调用[cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator),指定字符串参数'RSA1024|PRIMES_2',创建RSA密钥类型为RSA1024、素数个数为2的非对称密钥生成器(AsyKeyGenerator)。 19 202. 调用[AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1),随机生成非对称密钥对象(KeyPair)。 21 22 KeyPair对象中包括公钥PubKey、私钥PriKey。 23 243. 调用[PubKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded)和[PriKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded),分别获取密钥对象的二进制数据。 25 26- 以使用Promise方式随机生成RSA密钥对为例: 27 ```ts 28 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 29 30 function generateAsyKey() { 31 // 创建一个AsyKeyGenerator实例。 32 let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2'); 33 // 使用密钥生成器随机生成非对称密钥对。 34 let keyGenPromise = rsaGenerator.generateKeyPair(); 35 keyGenPromise.then(keyPair => { 36 let pubKey = keyPair.pubKey; 37 let priKey = keyPair.priKey; 38 // 获取非对称密钥对的二进制数据。 39 let pkBlob = pubKey.getEncoded(); 40 let skBlob = priKey.getEncoded(); 41 console.info('pk bin data' + pkBlob.data); 42 console.info('sk bin data' + skBlob.data); 43 }); 44 } 45 ``` 46 47- 同步返回结果(调用方法[generateKeyPairSync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypairsync12)): 48 ```ts 49 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 50 51 function generateAsyKeySync() { 52 // 创建一个AsyKeyGenerator实例。 53 let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2'); 54 // 使用密钥生成器随机生成非对称密钥对。 55 try { 56 let keyPair = rsaGenerator.generateKeyPairSync(); 57 if (keyPair !== null) { 58 let pubKey = keyPair.pubKey; 59 let priKey = keyPair.priKey; 60 // 获取非对称密钥对的二进制数据。 61 let pkBlob = pubKey.getEncoded(); 62 let skBlob = priKey.getEncoded(); 63 console.info('pk bin data' + pkBlob.data); 64 console.info('sk bin data' + skBlob.data); 65 } else { 66 console.error("[Sync]: get key pair result fail!"); 67 } 68 } catch (e) { 69 console.error(`get key pair failed, ${e.code}, ${e.message}`); 70 } 71 } 72 ``` 73 74## 随机生成SM2密钥对 75 76对应的算法规格请查看[非对称密钥生成和转换规格:SM2](crypto-asym-key-generation-conversion-spec.md#sm2)。 77 781. 调用[cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator),指定字符串参数'SM2_256',创建密钥算法为SM2、密钥长度为256位的非对称密钥生成器(AsyKeyGenerator)。 79 802. 调用[AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1),随机生成非对称密钥对象(KeyPair)。 81 82 KeyPair对象中包括公钥PubKey、私钥PriKey。 83 843. 调用[PubKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded)和[PriKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded),分别获取密钥对象的二进制数据。 85 86- 以使用Promise方式随机生成SM2密钥对为例: 87 ```ts 88 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 89 90 function generateSM2Key() { 91 // 创建一个AsyKeyGenerator实例。 92 let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2_256'); 93 // 使用密钥生成器随机生成非对称密钥对。 94 let keyGenPromise = sm2Generator.generateKeyPair(); 95 keyGenPromise.then(keyPair => { 96 let pubKey = keyPair.pubKey; 97 let priKey = keyPair.priKey; 98 // 获取非对称密钥对的二进制数据。 99 let pkBlob = pubKey.getEncoded(); 100 let skBlob = priKey.getEncoded(); 101 console.info('pk bin data' + pkBlob.data); 102 console.info('sk bin data' + skBlob.data); 103 }); 104 } 105 ``` 106 107- 同步返回结果(调用方法[generateKeyPairSync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypairsync12)): 108 ```ts 109 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 110 111 function generateSM2KeySync() { 112 // 创建一个AsyKeyGenerator实例。 113 let rsaGenerator = cryptoFramework.createAsyKeyGenerator('SM2_256'); 114 // 使用密钥生成器随机生成非对称密钥对。 115 try { 116 let keyPair = rsaGenerator.generateKeyPairSync(); 117 if (keyPair !== null) { 118 let pubKey = keyPair.pubKey; 119 let priKey = keyPair.priKey; 120 // 获取非对称密钥对的二进制数据。 121 let pkBlob = pubKey.getEncoded(); 122 let skBlob = priKey.getEncoded(); 123 console.info('pk bin data' + pkBlob.data); 124 console.info('sk bin data' + skBlob.data); 125 } else { 126 console.error("[Sync]: get key pair result fail!"); 127 } 128 } catch (e) { 129 console.error(`get key pair failed, ${e.code}, ${e.message}`); 130 } 131 } 132 ``` 133