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