1e41f4b71Sopenharmony_ci# Randomly Generating a Symmetric Key (ArkTS)
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThis topic uses AES and SM4 as an example to describe how to generate a symmetric key and obtain the binary data.
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ciThe symmetric key (**SymKey**) 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 AES Key
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ciFor details about the algorithm specifications, see [AES](crypto-sym-key-generation-conversion-spec.md#aes).
13e41f4b71Sopenharmony_ci
14e41f4b71Sopenharmony_ci1. Use [cryptoFramework.createSymKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreatesymkeygenerator) with the string parameter **'AES256'** to create a symmetric key generator (**SymKeyGenerator**) object for a 256-bit AES key.
15e41f4b71Sopenharmony_ci
16e41f4b71Sopenharmony_ci2. Use [SymKeyGenerator.generateSymKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkey-1) to randomly generate a symmetric key (**SymKey**) object.
17e41f4b71Sopenharmony_ci
18e41f4b71Sopenharmony_ci3. Use [SymKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the key.
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci- Example: Randomly generate a 256-bit AES key (using promise-based APIs).
21e41f4b71Sopenharmony_ci
22e41f4b71Sopenharmony_ci  ```ts
23e41f4b71Sopenharmony_ci  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci  function testGenerateAesKey() {
26e41f4b71Sopenharmony_ci    // Create a SymKeyGenerator instance.
27e41f4b71Sopenharmony_ci    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
28e41f4b71Sopenharmony_ci    // Use SymKeyGenerator to randomly generate a symmetric key.
29e41f4b71Sopenharmony_ci    let promiseSymKey = symKeyGenerator.generateSymKey();
30e41f4b71Sopenharmony_ci    promiseSymKey.then(key => {
31e41f4b71Sopenharmony_ci      // Obtain the binary data of the symmetric key and output a 256-bit key, which is of 32 bytes.
32e41f4b71Sopenharmony_ci      let encodedKey = key.getEncoded();
33e41f4b71Sopenharmony_ci      console.info('key hex:' + encodedKey.data);
34e41f4b71Sopenharmony_ci    });
35e41f4b71Sopenharmony_ci  }
36e41f4b71Sopenharmony_ci  ```
37e41f4b71Sopenharmony_ci
38e41f4b71Sopenharmony_ci- Example using synchronous API [generateSymKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkeysync12):
39e41f4b71Sopenharmony_ci  ```ts
40e41f4b71Sopenharmony_ci  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
41e41f4b71Sopenharmony_ci
42e41f4b71Sopenharmony_ci  function testSyncGenerateAesKey() {
43e41f4b71Sopenharmony_ci    // Create a SymKeyGenerator instance.
44e41f4b71Sopenharmony_ci    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
45e41f4b71Sopenharmony_ci    // Use SymKeyGenerator to randomly generate a symmetric key.
46e41f4b71Sopenharmony_ci    let promiseSymKey = symKeyGenerator.generateSymKeySync();
47e41f4b71Sopenharmony_ci    // Obtain the binary data of the symmetric key and output a 256-bit key, which is of 32 bytes.
48e41f4b71Sopenharmony_ci    let encodedKey = promiseSymKey.getEncoded();
49e41f4b71Sopenharmony_ci    console.info('key hex:' + encodedKey.data);
50e41f4b71Sopenharmony_ci  }
51e41f4b71Sopenharmony_ci  ```
52e41f4b71Sopenharmony_ci
53e41f4b71Sopenharmony_ci
54e41f4b71Sopenharmony_ci## Randomly Generating an SM4 Key
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ciFor details about the algorithm specifications, see [SM4](crypto-sym-key-generation-conversion-spec.md#sm4).
57e41f4b71Sopenharmony_ci
58e41f4b71Sopenharmony_ci1. Use [cryptoFramework.createSymKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreatesymkeygenerator) with the string parameter **'SM4_128'** to create a symmetric key generator (**SymKeyGenerator**) object for a 128-bit SM4 key.
59e41f4b71Sopenharmony_ci   If you need to use other algorithms, modify the string parameter.
60e41f4b71Sopenharmony_ci
61e41f4b71Sopenharmony_ci2. Use [SymKeyGenerator.generateSymKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkey-1) to randomly generate a symmetric key (**SymKey**) object.
62e41f4b71Sopenharmony_ci
63e41f4b71Sopenharmony_ci3. Use [SymKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the key.
64e41f4b71Sopenharmony_ci
65e41f4b71Sopenharmony_ci- Example: Randomly generate a 128-bit SM4 key (using promise-based APIs).
66e41f4b71Sopenharmony_ci
67e41f4b71Sopenharmony_ci  ```ts
68e41f4b71Sopenharmony_ci  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
69e41f4b71Sopenharmony_ci
70e41f4b71Sopenharmony_ci  function testGenerateSM4Key() {
71e41f4b71Sopenharmony_ci    // Create a SymKeyGenerator instance.
72e41f4b71Sopenharmony_ci    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128');
73e41f4b71Sopenharmony_ci    // Use SymKeyGenerator to randomly generate a symmetric key.
74e41f4b71Sopenharmony_ci    let promiseSymKey = symKeyGenerator.generateSymKey();
75e41f4b71Sopenharmony_ci    promiseSymKey.then(key => {
76e41f4b71Sopenharmony_ci      // Obtain the binary data of the symmetric key and output a 128-bit byte stream, which is of 16 bytes.
77e41f4b71Sopenharmony_ci      let encodedKey = key.getEncoded();
78e41f4b71Sopenharmony_ci      console.info('key hex:' + encodedKey.data);
79e41f4b71Sopenharmony_ci    });
80e41f4b71Sopenharmony_ci  }
81e41f4b71Sopenharmony_ci  ```
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci- Example using synchronous API [generateSymKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkeysync12):
84e41f4b71Sopenharmony_ci  ```ts
85e41f4b71Sopenharmony_ci  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci  function testSyncGenerateSm4Key() {
88e41f4b71Sopenharmony_ci    // Create a SymKeyGenerator instance.
89e41f4b71Sopenharmony_ci    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128');
90e41f4b71Sopenharmony_ci    // Use SymKeyGenerator to randomly generate a symmetric key.
91e41f4b71Sopenharmony_ci    let promiseSymKey = symKeyGenerator.generateSymKeySync();
92e41f4b71Sopenharmony_ci    // Obtain the binary data of the symmetric key and output a 128-bit byte stream, which is of 16 bytes.
93e41f4b71Sopenharmony_ci    let encodedKey = promiseSymKey.getEncoded();
94e41f4b71Sopenharmony_ci    console.info('key hex:' + encodedKey.data);
95e41f4b71Sopenharmony_ci  }
96e41f4b71Sopenharmony_ci  ```
97