1# Randomly Generating a Symmetric Key 2 3 4This topic uses AES and SM4 as an example to describe how to generate a symmetric key and obtain the binary data. 5 6 7The 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. 8 9 10## Randomly Generating an AES Key 11 12For details about the algorithm specifications, see [AES](crypto-sym-key-generation-conversion-spec.md#aes). 13 141. 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. 15 162. Use [SymKeyGenerator.generateSymKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkey-1) to randomly generate a symmetric key (**SymKey**) object. 17 183. Use [SymKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the key. 19 20- Example: Randomly generate a 256-bit AES key (using promise-based APIs). 21 22 ```ts 23 import cryptoFramework from '@ohos.security.cryptoFramework'; 24 25 function testGenerateAesKey() { 26 // Create a SymKeyGenerator instance. 27 let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256'); 28 // Use SymKeyGenerator to randomly generate a symmetric key. 29 let promiseSymKey = symKeyGenerator.generateSymKey(); 30 promiseSymKey.then(key => { 31 // Obtain the binary data of the symmetric key and output a 256-bit key, which is of 32 bytes. 32 let encodedKey = key.getEncoded(); 33 console.info('key hex:' + encodedKey.data); 34 }); 35 } 36 ``` 37 38 39## Randomly Generating an SM4 Key 40 41For details about the algorithm specifications, see [SM4](crypto-sym-key-generation-conversion-spec.md#sm4). 42 431. 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. 44 If you need to use other algorithms, modify the string parameter. 45 462. Use [SymKeyGenerator.generateSymKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkey-1) to randomly generate a symmetric key (**SymKey**) object. 47 483. Use [SymKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the key. 49 50- Example: Randomly generate a 128-bit SM4 key (using promise-based APIs). 51 52 ```ts 53 import cryptoFramework from '@ohos.security.cryptoFramework'; 54 55 function testGenerateSM4Key() { 56 // Create a SymKeyGenerator instance. 57 let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); 58 // Use SymKeyGenerator to randomly generate a symmetric key. 59 let promiseSymKey = symKeyGenerator.generateSymKey(); 60 promiseSymKey.then(key => { 61 // Obtain the binary data of the symmetric key and output a 128-bit byte stream, which is of 16 bytes. 62 let encodedKey = key.getEncoded(); 63 console.info('key hex:' + encodedKey.data); 64 }); 65 } 66 ``` 67