1# 随机生成对称密钥(ArkTS)
2
3
4以AES和SM4为例,随机生成对称密钥(SymKey),并获得二进制数据。
5
6
7对称密钥对象可用于后续加解密操作,二进制数据可用于存储或运输。
8
9
10## 随机生成AES密钥
11
12对应的算法规格请查看[对称密钥生成和转换规格:AES](crypto-sym-key-generation-conversion-spec.md#aes)。
13
141. 调用[cryptoFramework.createSymKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreatesymkeygenerator),指定字符串参数'AES256',创建密钥算法为AES、密钥长度为256位的对称密钥生成器(SymKeyGenerator)。
15
162. 调用[SymKeyGenerator.generateSymKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkey-1),随机生成对称密钥对象(SymKey)。
17
183. 调用[SymKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded),获取密钥对象的二进制数据。
19
20- 以使用Promise方式随机生成AES密钥为例:
21
22  ```ts
23  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
24
25  function testGenerateAesKey() {
26    // 创建SymKeyGenerator实例
27    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
28    // 使用密钥生成器随机生成对称密钥
29    let promiseSymKey = symKeyGenerator.generateSymKey();
30    promiseSymKey.then(key => {
31      // 获取对称密钥的二进制数据,输出256位密钥。长度为32字节
32      let encodedKey = key.getEncoded();
33      console.info('key hex:' + encodedKey.data);
34    });
35  }
36  ```
37
38- 同步方法(调用方法[generateSymKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkeysync12)):
39  ```ts
40  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
41
42  function testSyncGenerateAesKey() {
43    // 创建SymKeyGenerator实例
44    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
45    // 使用密钥生成器随机生成对称密钥
46    let promiseSymKey = symKeyGenerator.generateSymKeySync();
47    // 获取对称密钥的二进制数据,输出256位密钥。长度为32字节
48    let encodedKey = promiseSymKey.getEncoded();
49    console.info('key hex:' + encodedKey.data);
50  }
51  ```
52
53
54## 随机生成SM4密钥
55
56对应的算法规格请查看[对称密钥生成和转换规格:SM4](crypto-sym-key-generation-conversion-spec.md#sm4)。
57
581. 调用[cryptoFramework.createSymKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreatesymkeygenerator),指定字符串参数'SM4_128',创建密钥算法为SM4、密钥长度为128位的对称密钥生成器(SymKeyGenerator)。
59   如果开发者需要使用其他算法,请注意修改此处入参的字符串参数。
60
612. 调用[SymKeyGenerator.generateSymKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkey-1),随机生成对称密钥对象(SymKey)。
62
633. 调用[SymKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded),获取密钥对象的二进制数据。
64
65- 以使用Promise方式随机生成SM4密钥为例:
66
67  ```ts
68  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
69
70  function testGenerateSM4Key() {
71    // 创建SymKeyGenerator实例
72    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128');
73    // 使用密钥生成器随机生成对称密钥
74    let promiseSymKey = symKeyGenerator.generateSymKey();
75    promiseSymKey.then(key => {
76      // 获取对称密钥的二进制数据,输出128位字节流。长度为16字节
77      let encodedKey = key.getEncoded();
78      console.info('key hex:' + encodedKey.data);
79    });
80  }
81  ```
82
83- 同步方法(调用方法[generateSymKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatesymkeysync12)):
84  ```ts
85  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
86
87  function testSyncGenerateSm4Key() {
88    // 创建SymKeyGenerator实例
89    let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128');
90    // 使用密钥生成器随机生成对称密钥
91    let promiseSymKey = symKeyGenerator.generateSymKeySync();
92    // 获取对称密钥的二进制数据,输出128位字节流。长度为16字节
93    let encodedKey = promiseSymKey.getEncoded();
94    console.info('key hex:' + encodedKey.data);
95  }
96  ```
97