1# 使用RSA私钥进行编码解码(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**编码** 11 121. 调用[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。 13 14 如何生成RSA非对称密钥对,开发者可参考下文示例,并结合[非对称密钥生成和转换规格:RSA](crypto-asym-key-generation-conversion-spec.md#rsa)和[随机生成非对称密钥对](crypto-generate-asym-key-pair-randomly.md)理解,参考文档与当前示例可能存在入参差异,请在阅读时注意区分。 15 162. 传入参数[KeyEncodingConfig](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#keyencodingconfig18),参数PKCS1/PKCS8,调用[prikey.getEncodedPem](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencodedpem18)生成编码后的私钥字符串。 17 18**解码** 19 201. 调用[cryptoFramework.createAsyKeyGenerator](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygenerator)生成RSA非对称密钥生成器asyKeyGenerator。 21 22 如何生成RSA非对称密钥对,开发者可参考下文示例,并结合[非对称密钥生成和转换规格:RSA](crypto-asym-key-generation-conversion-spec.md#rsa)。 23 24 > **注意:** 25 > 解码应该与编码传入的算法一致。 26 272. 调用异步[asyKeyGenerator.convertPemKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#convertpemkey18)或者同步方法[asyKeyGenerator.convertPemKeySync](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#convertpemkeysync18),传入编码后的私钥字符串与编码口令。最后返回编码前的私钥字符串。 28 29- 编码示例: 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- 解码示例: 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 ```