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