1# Randomly Generating a Symmetric Key (ArkTS) 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 '@kit.CryptoArchitectureKit'; 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- Example using synchronous API [generateSymKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkeysync12): 39 ```ts 40 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 41 42 function testSyncGenerateAesKey() { 43 // Create a SymKeyGenerator instance. 44 let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256'); 45 // Use SymKeyGenerator to randomly generate a symmetric key. 46 let promiseSymKey = symKeyGenerator.generateSymKeySync(); 47 // Obtain the binary data of the symmetric key and output a 256-bit key, which is of 32 bytes. 48 let encodedKey = promiseSymKey.getEncoded(); 49 console.info('key hex:' + encodedKey.data); 50 } 51 ``` 52 53 54## Randomly Generating an SM4 Key 55 56For details about the algorithm specifications, see [SM4](crypto-sym-key-generation-conversion-spec.md#sm4). 57 581. 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. 59 If you need to use other algorithms, modify the string parameter. 60 612. Use [SymKeyGenerator.generateSymKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkey-1) to randomly generate a symmetric key (**SymKey**) object. 62 633. Use [SymKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the key. 64 65- Example: Randomly generate a 128-bit SM4 key (using promise-based APIs). 66 67 ```ts 68 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 69 70 function testGenerateSM4Key() { 71 // Create a SymKeyGenerator instance. 72 let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); 73 // Use SymKeyGenerator to randomly generate a symmetric key. 74 let promiseSymKey = symKeyGenerator.generateSymKey(); 75 promiseSymKey.then(key => { 76 // Obtain the binary data of the symmetric key and output a 128-bit byte stream, which is of 16 bytes. 77 let encodedKey = key.getEncoded(); 78 console.info('key hex:' + encodedKey.data); 79 }); 80 } 81 ``` 82 83- Example using synchronous API [generateSymKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkeysync12): 84 ```ts 85 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 86 87 function testSyncGenerateSm4Key() { 88 // Create a SymKeyGenerator instance. 89 let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); 90 // Use SymKeyGenerator to randomly generate a symmetric key. 91 let promiseSymKey = symKeyGenerator.generateSymKeySync(); 92 // Obtain the binary data of the symmetric key and output a 128-bit byte stream, which is of 16 bytes. 93 let encodedKey = promiseSymKey.getEncoded(); 94 console.info('key hex:' + encodedKey.data); 95 } 96 ``` 97