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