1# 随机生成非对称密钥对 2 3 4以RSA和SM2为例,随机生成非对称密钥对(KeyPair),并获得二进制数据。 5 6 7非对称密钥对可用于后续加解密等操作,二进制数据可用于存储或运输。 8 9 10## 随机生成RSA密钥对 11 12对应的算法规格请查看[非对称密钥生成和转换规格:RSA](crypto-asym-key-generation-conversion-spec.md#rsa)。 13 141. 调用[cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator),指定字符串参数'RSA1024|PRIMES_2',创建RSA密钥类型为RSA1024、素数个数为2的非对称密钥生成器(AsyKeyGenerator)。 15 162. 调用[AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1),随机生成非对称密钥对象(KeyPair)。 17 18 KeyPair对象中包括公钥PubKey、私钥PriKey。 19 203. 调用[PubKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded)和[PriKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded),分别获取密钥对象的二进制数据。 21 22以使用Promise方式随机生成RSA密钥对为例: 23 24```ts 25import cryptoFramework from '@ohos.security.cryptoFramework'; 26 27function generateAsyKey() { 28 // 创建一个AsyKeyGenerator实例 29 let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2'); 30 // 使用密钥生成器随机生成非对称密钥对 31 let keyGenPromise = rsaGenerator.generateKeyPair(); 32 keyGenPromise.then(keyPair => { 33 let pubKey = keyPair.pubKey; 34 let priKey = keyPair.priKey; 35 // 获取非对称密钥对的二进制数据 36 let pkBlob = pubKey.getEncoded(); 37 let skBlob = priKey.getEncoded(); 38 AlertDialog.show({ message: 'pk bin data' + pkBlob.data }); 39 AlertDialog.show({ message: 'sk bin data' + skBlob.data }); 40 }); 41} 42``` 43 44 45## 随机生成SM2密钥对 46 47对应的算法规格请查看[非对称密钥生成和转换规格:SM2](crypto-asym-key-generation-conversion-spec.md#sm2)。 48 491. 调用[cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator),指定字符串参数'SM2_256',创建密钥算法为SM2、密钥长度为256位的非对称密钥生成器(AsyKeyGenerator)。 50 512. 调用[AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1),随机生成非对称密钥对象(KeyPair)。 52 53 KeyPair对象中包括公钥PubKey、私钥PriKey。 54 553. 调用[PubKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded)和[PriKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded),分别获取密钥对象的二进制数据。 56 57以使用Promise方式随机生成SM2密钥对为例: 58 59```ts 60import cryptoFramework from '@ohos.security.cryptoFramework'; 61 62function generateSM2Key() { 63 // 创建一个AsyKeyGenerator实例 64 let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2_256'); 65 // 使用密钥生成器随机生成非对称密钥对 66 let keyGenPromise = sm2Generator.generateKeyPair(); 67 keyGenPromise.then(keyPair => { 68 let pubKey = keyPair.pubKey; 69 let priKey = keyPair.priKey; 70 // 获取非对称密钥对的二进制数据 71 let pkBlob = pubKey.getEncoded(); 72 let skBlob = priKey.getEncoded(); 73 AlertDialog.show({ message: 'pk bin data' + pkBlob.data }); 74 AlertDialog.show({ message: 'sk bin data' + skBlob.data }); 75 }); 76} 77``` 78