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