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