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