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