• 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以RSA和SM2为例,随机生成非对称密钥对(KeyPair),并获得二进制数据。
11
12非对称密钥对可用于后续加解密等操作,二进制数据可用于存储或运输。
13
14## 随机生成RSA密钥对
15
16对应的算法规格请查看[非对称密钥生成和转换规格:RSA](crypto-asym-key-generation-conversion-spec.md#rsa)。
17
181. 调用[cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator),指定字符串参数'RSA1024|PRIMES_2',创建RSA密钥类型为RSA1024、素数个数为2的非对称密钥生成器(AsyKeyGenerator)。
19
202. 调用[AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1),随机生成非对称密钥对象(KeyPair)。
21
22   KeyPair对象中包括公钥PubKey、私钥PriKey。
23
243. 调用[PubKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded)和[PriKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded),分别获取密钥对象的二进制数据。
25
26- 以使用Promise方式随机生成RSA密钥对为例:
27  ```ts
28  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
29
30  function generateAsyKey() {
31    // 创建一个AsyKeyGenerator实例。
32    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2');
33    // 使用密钥生成器随机生成非对称密钥对。
34    let keyGenPromise = rsaGenerator.generateKeyPair();
35    keyGenPromise.then(keyPair => {
36      let pubKey = keyPair.pubKey;
37      let priKey = keyPair.priKey;
38      // 获取非对称密钥对的二进制数据。
39      let pkBlob = pubKey.getEncoded();
40      let skBlob = priKey.getEncoded();
41      console.info('pk bin data' + pkBlob.data);
42      console.info('sk bin data' + skBlob.data);
43    });
44  }
45  ```
46
47- 同步返回结果(调用方法[generateKeyPairSync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypairsync12)):
48  ```ts
49  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
50
51  function generateAsyKeySync() {
52    // 创建一个AsyKeyGenerator实例。
53    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2');
54    // 使用密钥生成器随机生成非对称密钥对。
55    try {
56      let keyPair = rsaGenerator.generateKeyPairSync();
57      if (keyPair !== null) {
58        let pubKey = keyPair.pubKey;
59        let priKey = keyPair.priKey;
60        // 获取非对称密钥对的二进制数据。
61        let pkBlob = pubKey.getEncoded();
62        let skBlob = priKey.getEncoded();
63        console.info('pk bin data' + pkBlob.data);
64        console.info('sk bin data' + skBlob.data);
65      } else {
66        console.error("[Sync]: get key pair result fail!");
67      }
68    } catch (e) {
69      console.error(`get key pair failed, ${e.code}, ${e.message}`);
70    }
71  }
72  ```
73
74## 随机生成SM2密钥对
75
76对应的算法规格请查看[非对称密钥生成和转换规格:SM2](crypto-asym-key-generation-conversion-spec.md#sm2)。
77
781. 调用[cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator),指定字符串参数'SM2_256',创建密钥算法为SM2、密钥长度为256位的非对称密钥生成器(AsyKeyGenerator)。
79
802. 调用[AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1),随机生成非对称密钥对象(KeyPair)。
81
82   KeyPair对象中包括公钥PubKey、私钥PriKey。
83
843. 调用[PubKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded)和[PriKey.getEncoded](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencoded),分别获取密钥对象的二进制数据。
85
86- 以使用Promise方式随机生成SM2密钥对为例:
87  ```ts
88  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
89
90  function generateSM2Key() {
91    // 创建一个AsyKeyGenerator实例。
92    let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2_256');
93    // 使用密钥生成器随机生成非对称密钥对。
94    let keyGenPromise = sm2Generator.generateKeyPair();
95    keyGenPromise.then(keyPair => {
96      let pubKey = keyPair.pubKey;
97      let priKey = keyPair.priKey;
98      // 获取非对称密钥对的二进制数据。
99      let pkBlob = pubKey.getEncoded();
100      let skBlob = priKey.getEncoded();
101      console.info('pk bin data' + pkBlob.data);
102      console.info('sk bin data' + skBlob.data);
103    });
104  }
105  ```
106
107- 同步返回结果(调用方法[generateKeyPairSync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypairsync12)):
108  ```ts
109  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
110
111  function generateSM2KeySync() {
112    // 创建一个AsyKeyGenerator实例。
113    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('SM2_256');
114    // 使用密钥生成器随机生成非对称密钥对。
115    try {
116      let keyPair = rsaGenerator.generateKeyPairSync();
117      if (keyPair !== null) {
118        let pubKey = keyPair.pubKey;
119        let priKey = keyPair.priKey;
120        // 获取非对称密钥对的二进制数据。
121        let pkBlob = pubKey.getEncoded();
122        let skBlob = priKey.getEncoded();
123        console.info('pk bin data' + pkBlob.data);
124        console.info('sk bin data' + skBlob.data);
125      } else {
126        console.error("[Sync]: get key pair result fail!");
127      }
128    } catch (e) {
129      console.error(`get key pair failed, ${e.code}, ${e.message}`);
130    }
131  }
132  ```
133