1# Randomly Generating a Symmetric Key (ArkTS) 2 3<!--Kit: Crypto Architecture Kit--> 4<!--Subsystem: Security--> 5<!--Owner: @zxz--3--> 6<!--Designer: @lanming--> 7<!--Tester: @PAFT--> 8<!--Adviser: @zengyawen--> 9 10This topic uses AES and SM4 as an example to describe how to generate a symmetric key and obtain the binary data. 11 12The symmetric key (**SymKey**) object created can be used for subsequent encryption and decryption operations, and the binary data can be used for key storage or transfer. 13 14## Randomly Generating an AES Key 15 16For details about the algorithm specifications, see [AES](crypto-sym-key-generation-conversion-spec.md#aes). 17 181. Call [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. 19 202. Call [SymKeyGenerator.generateSymKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkey-1) to randomly generate a symmetric key (**SymKey**) object. 21 223. Call [SymKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the key. 23 24- Example: Randomly generate a 256-bit AES key (using promise-based APIs). 25 26 ```ts 27 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 28 29 function testGenerateAesKey() { 30 // Create a SymKeyGenerator instance. 31 let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256'); 32 // Use SymKeyGenerator to randomly generate a symmetric key. 33 let promiseSymKey = symKeyGenerator.generateSymKey(); 34 promiseSymKey.then(key => { 35 // Obtain the binary data of the symmetric key and output a 256-bit key, which is of 32 bytes. 36 let encodedKey = key.getEncoded(); 37 console.info('key hex:' + encodedKey.data); 38 }); 39 } 40 ``` 41 42- Example using synchronous API [generateSymKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkeysync12): 43 ```ts 44 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 45 46 function testSyncGenerateAesKey() { 47 // Create a SymKeyGenerator instance. 48 let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256'); 49 // Use SymKeyGenerator to randomly generate a symmetric key. 50 let promiseSymKey = symKeyGenerator.generateSymKeySync(); 51 // Obtain the binary data of the symmetric key and output a 256-bit key, which is of 32 bytes. 52 let encodedKey = promiseSymKey.getEncoded(); 53 console.info('key hex:' + encodedKey.data); 54 } 55 ``` 56 57## Randomly Generating an SM4 Key 58 59For details about the algorithm specifications, see [SM4](crypto-sym-key-generation-conversion-spec.md#sm4). 60 611. Call [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. 62 If you need to use other algorithms, modify the string parameter. 63 642. Call [SymKeyGenerator.generateSymKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkey-1) to randomly generate a symmetric key (**SymKey**) object. 65 663. Call [SymKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded) to obtain the binary data of the key. 67 68- Example: Randomly generate a 128-bit SM4 key (using promise-based APIs). 69 70 ```ts 71 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 72 73 function testGenerateSM4Key() { 74 // Create a SymKeyGenerator instance. 75 let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); 76 // Use SymKeyGenerator to randomly generate a symmetric key. 77 let promiseSymKey = symKeyGenerator.generateSymKey(); 78 promiseSymKey.then(key => { 79 // Obtain the binary data of the symmetric key and output a 128-bit byte stream, which is of 16 bytes. 80 let encodedKey = key.getEncoded(); 81 console.info('key hex:' + encodedKey.data); 82 }); 83 } 84 ``` 85 86- Example using synchronous API [generateSymKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkeysync12): 87 ```ts 88 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 89 90 function testSyncGenerateSm4Key() { 91 // Create a SymKeyGenerator instance. 92 let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); 93 // Use SymKeyGenerator to randomly generate a symmetric key. 94 let promiseSymKey = symKeyGenerator.generateSymKeySync(); 95 // Obtain the binary data of the symmetric key and output a 128-bit byte stream, which is of 16 bytes. 96 let encodedKey = promiseSymKey.getEncoded(); 97 console.info('key hex:' + encodedKey.data); 98 } 99 ``` 100