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