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