• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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