• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Encoding and Decoding with an RSA Private Key (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**Encoding**
11
121. Call [cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator) and [AsyKeyGenerator.generateKeyPair](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatekeypair-1) to generate a 1024-bit RSA asymmetric key pair (**KeyPair**) with two primes. The **KeyPair** object includes a public key (**PubKey**) and a private key (**PriKey**).
13
14   In addition to the example in this topic, [RSA](crypto-asym-key-generation-conversion-spec.md#rsa) and [Randomly Generating an Asymmetric Key Pair](crypto-generate-asym-key-pair-randomly.md) may help you better understand how to generate an RSA asymmetric key pair. Note that the input parameters in the reference documents may be different from those in the example below.
15
162. Call [prikey.getEncodedPem](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencodedpem18) with the [KeyEncodingConfig](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#keyencodingconfig18) and **PKCS1/PKCS8** parameters to generate an encoded private key string.
17
18**Decoding**
19
201. Call [cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator) to create an RSA asymmetric key generator (**asyKeyGenerator**) instance.
21
22   For details about how to generate an RSA asymmetric key pair, see the following example and [RSA](crypto-asym-key-generation-conversion-spec.md#rsa).
23
24   > **NOTE**
25   > The algorithm passed in for encoding must be the same as that used in encoding.
26
272. Call [asyKeyGenerator.convertPemKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#convertpemkey18) or [asyKeyGenerator.convertPemKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#convertpemkeysync18) to pass in the encoded private key string and password. The private key string before encoding is returned.
28
29- Encoding example:
30  ```ts
31  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
32
33  function TestPriKeyPkcs1Encoded() {
34    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
35    let keyPair = rsaGenerator.generateKeyPairSync();
36    let options : cryptoFramework.KeyEncodingConfig = {
37        password: "123456",
38        cipherName: "AES-128-CBC"
39    }
40    let priPemKey = keyPair.priKey;
41    let priString = priPemKey.getEncodedPem('PKCS1', options);
42    console.info("[sync]TestPriKeyPkcs1Encoded priString output is " + priString);
43  }
44
45  ```
46
47- Decoding example:
48  ```ts
49  import { cryptoFramework } from '@kit.CryptoArchitectureKit';
50  import { BusinessError } from '@kit.BasicServicesKit';
51
52  let priKeyPkcs1EncodingStr : string =
53  "-----BEGIN RSA PRIVATE KEY-----\n"
54    +"Proc-Type: 4,ENCRYPTED\n"
55    +"DEK-Info: AES-128-CBC,815A066131BF05CF87CE610A59CC69AE\n\n"
56    +"7Jd0vmOmYGFZ2yRY8fqRl3+6rQlFtNcMILvcb5KWHDSrxA0ULmJE7CW0DSRikHoA\n"
57    +"t0KgafhYXeQXh0dRy9lvVRAFSLHCLJVjchx90V7ZSivBFEq7+iTozVp4AlbgYsJP\n"
58    +"vx/1sfZD2WAcyMJ7IDmJyft7xnpVSXsyWGTT4f3eaHJIh1dqjwrso7ucAW0FK6rp\n"
59    +"/TONyOoXNfXtRbVtxNyCWBxt4HCSclDZFvS9y8fz9ZwmCUV7jei/YdzyQI2wnE13\n"
60    +"W8cKlpzRFL6BWi8XPrUtAw5MWeHBAPUgPWMfcmiaeyi5BJFhQCrHLi+Gj4EEJvp7\n"
61    +"mP5cbnQAx6+paV5z9m71SKrI/WSc4ixsYYdVmlL/qwAK9YliFfoPl030YJWW6rFf\n"
62    +"T7J9BUlHGUJ0RB2lURNNLakM+UZRkeE9TByzCzgTxuQtyv5Lwsh2mAk3ia5x0kUO\n"
63    +"LHg3Eoabhdh+YZA5hHaxnpF7VjspB78E0F9Btq+A41rSJ6zDOdToHey4MJ2nxdey\n"
64    +"Z3bi81TZ6Fp4IuROrvZ2B/Xl3uNKR7n+AHRKnaAO87ywzyltvjwSh2y3xhJueiRs\n"
65    +"BiYkyL3/fnocD3pexTdN6h3JgQGgO5GV8zw/NrxA85mw8o9im0HreuFObmNj36T9\n"
66    +"k5N+R/QIXW83cIQOLaWK1ThYcluytf0tDRiMoKqULiaA6HvDMigExLxuhCtnoF8I\n"
67    +"iOLN1cPdEVQjzwDHLqXP2DbWW1z9iRepLZlEm1hLRLEmOrTGKezYupVv306SSa6J\n"
68    +"OA55lAeXMbyjFaYCr54HWrpt4NwNBX1efMUURc+1LcHpzFrBTTLbfjIyq6as49pH\n"
69    +"-----END RSA PRIVATE KEY-----\n"
70
71  async function TestConvertPemKeyByPromise() {
72    let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
73    asyKeyGenerator.convertPemKey(null, priKeyPkcs1EncodingStr, "123456")
74      .then(keyPair => {
75        let priKey = keyPair.priKey;
76        if (priKey) {
77          console.info('convertPemKey success.');
78        }
79      }).catch((error: BusinessError) => {
80      console.error("convertPemKey error, error message is " + error.message);
81    });
82  }
83
84  ```
85