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