1e41f4b71Sopenharmony_ci# Randomly Generating an Asymmetric Key Pair (ArkTS)
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThis topic uses RSA and SM2 as an example to describe how to generate an asymmetric key pair (**KeyPair**) and obtain the binary data.
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ciThe **KeyPair** object created can be used for subsequent encryption and decryption operations, and the binary data can be used for key storage and transfer.
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci
10e41f4b71Sopenharmony_ci## Randomly Generating an RSA Key Pair
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ciFor details about the algorithm specifications, see [RSA](crypto-asym-key-generation-conversion-spec.md#rsa).
13e41f4b71Sopenharmony_ci
14e41f4b71Sopenharmony_ci1. Use [cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator) with the string parameter **'RSA1024|PRIMES_2'** to create an asymmetric key generator (**AsyKeyGenerator**) object for a 1024-bit RSA key with two primes.
15e41f4b71Sopenharmony_ci
16e41f4b71Sopenharmony_ci2. Use [AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1) to randomly generate an asymmetric key pair (**KeyPair**).
17e41f4b71Sopenharmony_ci   
18e41f4b71Sopenharmony_ci   The **KeyPair** object includes a public key (**PubKey**) and a private key (**PriKey**).
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci3. Use [PubKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the public key, and use [PriKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the private key.
21e41f4b71Sopenharmony_ci
22e41f4b71Sopenharmony_ci- Example: Randomly generate an RSA key pair (using promise-based APIs).
23e41f4b71Sopenharmony_ci  ```ts
24e41f4b71Sopenharmony_ci  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
25e41f4b71Sopenharmony_ci
26e41f4b71Sopenharmony_ci  function generateAsyKey() {
27e41f4b71Sopenharmony_ci    // Create an AsyKeyGenerator instance.
28e41f4b71Sopenharmony_ci    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2');
29e41f4b71Sopenharmony_ci    // Use AsyKeyGenerator to randomly generate an asymmetric key pair.
30e41f4b71Sopenharmony_ci    let keyGenPromise = rsaGenerator.generateKeyPair();
31e41f4b71Sopenharmony_ci    keyGenPromise.then(keyPair => {
32e41f4b71Sopenharmony_ci      let pubKey = keyPair.pubKey;
33e41f4b71Sopenharmony_ci      let priKey = keyPair.priKey;
34e41f4b71Sopenharmony_ci      // Obtain the binary data of the asymmetric key pair.
35e41f4b71Sopenharmony_ci      let pkBlob = pubKey.getEncoded();
36e41f4b71Sopenharmony_ci      let skBlob = priKey.getEncoded();
37e41f4b71Sopenharmony_ci      console.info('pk bin data' + pkBlob.data);
38e41f4b71Sopenharmony_ci      console.info('sk bin data' + skBlob.data);
39e41f4b71Sopenharmony_ci    });
40e41f4b71Sopenharmony_ci  }
41e41f4b71Sopenharmony_ci  ```
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci- Example: Randomly generate an RSA key pair (using the synchronous API [generateKeyPairSync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypairsync12)).
44e41f4b71Sopenharmony_ci  ```ts
45e41f4b71Sopenharmony_ci  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
46e41f4b71Sopenharmony_ci
47e41f4b71Sopenharmony_ci  function generateAsyKeySync() {
48e41f4b71Sopenharmony_ci    // Create an AsyKeyGenerator instance.
49e41f4b71Sopenharmony_ci    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2');
50e41f4b71Sopenharmony_ci    // Use AsyKeyGenerator to randomly generate an asymmetric key pair.
51e41f4b71Sopenharmony_ci    try {
52e41f4b71Sopenharmony_ci      let keyPair = rsaGenerator.generateKeyPairSync();
53e41f4b71Sopenharmony_ci      if (keyPair != null) {
54e41f4b71Sopenharmony_ci        let pubKey = keyPair.pubKey;
55e41f4b71Sopenharmony_ci        let priKey = keyPair.priKey;
56e41f4b71Sopenharmony_ci        // Obtain the binary data of the asymmetric key pair.
57e41f4b71Sopenharmony_ci        let pkBlob = pubKey.getEncoded();
58e41f4b71Sopenharmony_ci        let skBlob = priKey.getEncoded();
59e41f4b71Sopenharmony_ci        console.info('pk bin data' + pkBlob.data);
60e41f4b71Sopenharmony_ci        console.info('sk bin data' + skBlob.data);
61e41f4b71Sopenharmony_ci      } else {
62e41f4b71Sopenharmony_ci        console.error("[Sync]: get key pair result fail!");
63e41f4b71Sopenharmony_ci      }
64e41f4b71Sopenharmony_ci    } catch (e) {
65e41f4b71Sopenharmony_ci      console.error(`get key pair failed, ${e.code}, ${e.message}`);
66e41f4b71Sopenharmony_ci    }
67e41f4b71Sopenharmony_ci  }
68e41f4b71Sopenharmony_ci  ```
69e41f4b71Sopenharmony_ci
70e41f4b71Sopenharmony_ci
71e41f4b71Sopenharmony_ci## Randomly Generating an SM2 Key Pair
72e41f4b71Sopenharmony_ci
73e41f4b71Sopenharmony_ciFor details about the algorithm specifications, see [SM2](crypto-asym-key-generation-conversion-spec.md#sm2).
74e41f4b71Sopenharmony_ci
75e41f4b71Sopenharmony_ci1. Use [cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator) with the string parameter **'SM2_256'** to create an asymmetric key generator (**AsyKeyGenerator**) object for a 256-bit SM2 key pair.
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci2. Use [AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1) to randomly generate an asymmetric key pair (**KeyPair**).
78e41f4b71Sopenharmony_ci   
79e41f4b71Sopenharmony_ci   The **KeyPair** object includes a public key (**PubKey**) and a private key (**PriKey**).
80e41f4b71Sopenharmony_ci
81e41f4b71Sopenharmony_ci3. Use [PubKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the public key, and use [PriKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the private key.
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci- Example: Randomly generate an SM2 key pair (using promise-based APIs).
84e41f4b71Sopenharmony_ci  ```ts
85e41f4b71Sopenharmony_ci  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci  function generateSM2Key() {
88e41f4b71Sopenharmony_ci    // Create an AsyKeyGenerator instance.
89e41f4b71Sopenharmony_ci    let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2_256');
90e41f4b71Sopenharmony_ci    // Use AsyKeyGenerator to randomly generate an asymmetric key pair.
91e41f4b71Sopenharmony_ci    let keyGenPromise = sm2Generator.generateKeyPair();
92e41f4b71Sopenharmony_ci    keyGenPromise.then(keyPair => {
93e41f4b71Sopenharmony_ci      let pubKey = keyPair.pubKey;
94e41f4b71Sopenharmony_ci      let priKey = keyPair.priKey;
95e41f4b71Sopenharmony_ci      // Obtain the binary data of the asymmetric key pair.
96e41f4b71Sopenharmony_ci      let pkBlob = pubKey.getEncoded();
97e41f4b71Sopenharmony_ci      let skBlob = priKey.getEncoded();
98e41f4b71Sopenharmony_ci      console.info('pk bin data' + pkBlob.data);
99e41f4b71Sopenharmony_ci      console.info('sk bin data' + skBlob.data);
100e41f4b71Sopenharmony_ci    });
101e41f4b71Sopenharmony_ci  }
102e41f4b71Sopenharmony_ci  ```
103e41f4b71Sopenharmony_ci
104e41f4b71Sopenharmony_ci- Example: Randomly generate an SM2 key pair (using the synchronous API [generateKeyPairSync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypairsync12)).
105e41f4b71Sopenharmony_ci  ```ts
106e41f4b71Sopenharmony_ci  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
107e41f4b71Sopenharmony_ci
108e41f4b71Sopenharmony_ci  function generateSM2KeySync() {
109e41f4b71Sopenharmony_ci    // Create an AsyKeyGenerator instance.
110e41f4b71Sopenharmony_ci    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('SM2_256');
111e41f4b71Sopenharmony_ci    // Use AsyKeyGenerator to randomly generate an asymmetric key pair.
112e41f4b71Sopenharmony_ci    try {
113e41f4b71Sopenharmony_ci      let keyPair = rsaGenerator.generateKeyPairSync();
114e41f4b71Sopenharmony_ci      if (keyPair != null) {
115e41f4b71Sopenharmony_ci        let pubKey = keyPair.pubKey;
116e41f4b71Sopenharmony_ci        let priKey = keyPair.priKey;
117e41f4b71Sopenharmony_ci        // Obtain the binary data of the asymmetric key pair.
118e41f4b71Sopenharmony_ci        let pkBlob = pubKey.getEncoded();
119e41f4b71Sopenharmony_ci        let skBlob = priKey.getEncoded();
120e41f4b71Sopenharmony_ci        console.info('pk bin data' + pkBlob.data);
121e41f4b71Sopenharmony_ci        console.info('sk bin data' + skBlob.data);
122e41f4b71Sopenharmony_ci      } else {
123e41f4b71Sopenharmony_ci        console.error("[Sync]: get key pair result fail!");
124e41f4b71Sopenharmony_ci      }
125e41f4b71Sopenharmony_ci    } catch (e) {
126e41f4b71Sopenharmony_ci      console.error(`get key pair failed, ${e.code}, ${e.message}`);
127e41f4b71Sopenharmony_ci    }
128e41f4b71Sopenharmony_ci  }
129e41f4b71Sopenharmony_ci  ```
130