• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# RSA支持私钥的编码解码
2
3**编码**
4
51. 调用[cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator)、[AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1),生成RSA密钥类型为RSA1024、素数个数为2的非对称密钥对(KeyPair)。KeyPair对象中包括公钥PubKey、私钥PriKey。
6
7   如何生成RSA非对称密钥对,开发者可参考下文示例,并结合[非对称密钥生成和转换规格:RSA](crypto-asym-key-generation-conversion-spec.md#rsa)和[随机生成非对称密钥对](crypto-generate-asym-key-pair-randomly.md)理解,参考文档与当前示例可能存在入参差异,请在阅读时注意区分。
8
92. 传入参数[KeyEncodingConfig](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#keyencodingconfig18),参数PKCS1/PCKS8,调用[prikey.getEncodedPem](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencodedpem18)生成编码后的私钥字符串。
10
11**解码**
12
131. 调用[cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator)生成RSA非对称密钥生成器asyKeyGenerator。
14
15   如何生成RSA非对称密钥对,开发者可参考下文示例,并结合[非对称密钥生成和转换规格:RSA](crypto-asym-key-generation-conversion-spec.md#rsa)。
16
17   **注意:**
18   解码应该与编码传入的算法一致。
19
202. 调用异步[asyKeyGenerator.convertPemKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#convertpemkey18)或者同步方法[asyKeyGenerator.convertPemKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#convertpemkeysync18),传入编码后的私钥字符串与编码口令。最后返回编码前的私钥字符串。
21
22- 编码示例:
23  ```ts
24  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
25
26  function TestPriKeyPkcs1Encoded() {
27    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
28    let keyPair = rsaGenerator.generateKeyPairSync();
29    let options : cryptoFramework.KeyEncodingConfig = {
30        password: "123456",
31        cipherName: "AES-128-CBC"
32    }
33    let priPemKey = keyPair.priKey;
34    let priString = priPemKey.getEncodedPem('PKCS1', options);
35    console.info("[sync]TestPriKeyPkcs1Encoded priString output is " + priString);
36  }
37
38  ```
39
40- 解码示例:
41  ```ts
42  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
43  import { BusinessError } from '@kit.BasicServicesKit';
44
45  let priKeyPkcs1EncodingStr : string =
46  "-----BEGIN RSA PRIVATE KEY-----\n"
47    +"Proc-Type: 4,ENCRYPTED\n"
48    +"DEK-Info: AES-128-CBC,815A066131BF05CF87CE610A59CC69AE\n\n"
49    +"7Jd0vmOmYGFZ2yRY8fqRl3+6rQlFtNcMILvcb5KWHDSrxA0ULmJE7CW0DSRikHoA\n"
50    +"t0KgafhYXeQXh0dRy9lvVRAFSLHCLJVjchx90V7ZSivBFEq7+iTozVp4AlbgYsJP\n"
51    +"vx/1sfZD2WAcyMJ7IDmJyft7xnpVSXsyWGTT4f3eaHJIh1dqjwrso7ucAW0FK6rp\n"
52    +"/TONyOoXNfXtRbVtxNyCWBxt4HCSclDZFvS9y8fz9ZwmCUV7jei/YdzyQI2wnE13\n"
53    +"W8cKlpzRFL6BWi8XPrUtAw5MWeHBAPUgPWMfcmiaeyi5BJFhQCrHLi+Gj4EEJvp7\n"
54    +"mP5cbnQAx6+paV5z9m71SKrI/WSc4ixsYYdVmlL/qwAK9YliFfoPl030YJWW6rFf\n"
55    +"T7J9BUlHGUJ0RB2lURNNLakM+UZRkeE9TByzCzgTxuQtyv5Lwsh2mAk3ia5x0kUO\n"
56    +"LHg3Eoabhdh+YZA5hHaxnpF7VjspB78E0F9Btq+A41rSJ6zDOdToHey4MJ2nxdey\n"
57    +"Z3bi81TZ6Fp4IuROrvZ2B/Xl3uNKR7n+AHRKnaAO87ywzyltvjwSh2y3xhJueiRs\n"
58    +"BiYkyL3/fnocD3pexTdN6h3JgQGgO5GV8zw/NrxA85mw8o9im0HreuFObmNj36T9\n"
59    +"k5N+R/QIXW83cIQOLaWK1ThYcluytf0tDRiMoKqULiaA6HvDMigExLxuhCtnoF8I\n"
60    +"iOLN1cPdEVQjzwDHLqXP2DbWW1z9iRepLZlEm1hLRLEmOrTGKezYupVv306SSa6J\n"
61    +"OA55lAeXMbyjFaYCr54HWrpt4NwNBX1efMUURc+1LcHpzFrBTTLbfjIyq6as49pH\n"
62    +"-----END RSA PRIVATE KEY-----\n"
63
64  async function TestConvertPemKeyByPromise() {
65    let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
66    asyKeyGenerator.convertPemKey(null, priKeyPkcs1EncodingStr, "123456")
67      .then(keyPair => {
68        console.info('convertPemKey success.');
69      }).catch((error: BusinessError) => {
70      console.error("convertPemKey error.");
71    });
72  }
73
74  ```