Облачные функции Firebase шифруют и дешифруют с помощью сбоя SHA256 RSA - PullRequest
1 голос
/ 20 апреля 2019

В настоящее время я пытаюсь зашифровать и расшифровать сообщение внутри функции из Firebase Cloud Functions, используя SHA256 RSA.Он отлично работает локально, но при развертывании функции он не работает на сервере Firebase.Я сталкиваюсь со следующей ошибкой на сервере

Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
    at Error (native)
    at Object.privateDecrypt (crypto.js:375:12)
    at decrypt (/user_code/lib/index.js:58:30)
    at exports.generateTransactionToken.functions.https.onRequest (/user_code/lib/index.js:75:30)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:57:9)
    at /var/tmp/worker/worker.js:783:7
    at /var/tmp/worker/worker.js:766:11
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickDomainCallback (internal/process/next_tick.js:128:9)

Мои функции структурированы следующим образом

import * as functions from 'firebase-functions';
import * as crypto from 'crypto';

function encrypt(message: string, publicKey: string) {
    const buffer = Buffer.from(message, 'utf8')
    const encrypted = crypto.publicEncrypt(publicKey, buffer)
    return encrypted.toString('base64')
  }

  function decrypt(encryptedMessage: string, privateKey: string) {
    const buffer = Buffer.from(encryptedMessage, 'base64')
    const decrypted = crypto.privateDecrypt(
      {
        key: privateKey,
        passphrase: '',
      },
      buffer,
    )
    return decrypted.toString('utf8')
  }

export const generateTransactionToken = functions.https.onRequest((request, response) => {

    const publicKey:string = functions.config().test.publickey
    const privateKey:string = functions.config().test.privatekey

    const fixedPublicKey:string = publicKey.replace(/\\n/g, '\n')
    const fixedPrivateKey:string = privateKey.replace(/\\n/g, '\n')

    const message = "hello people from the world";
    const encryptedMessage = encrypt(message, fixedPublicKey);
    const decryptedMessage = decrypt(encryptedMessage, fixedPrivateKey);


    let obj = {
        'public': publicKey,
        'private': privateKey,
        'message': message,
        'encrypted': encryptedMessage,
        'decrypted': decryptedMessage
    }

    response.status(200).send(obj);
});

И я устанавливаю свои переменные среды следующим образом

Закрытый ключ

firebase functions:config:set test.privatekey="-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,73B2FEB41FE8BD5AA9ECCD5F0AFBE37A\n\nE5lYh9m3kmOKYkXx213W3oK+EV7HCypSpgGSRrCTngutaT+1jNTGT8Je4Z0OLqAA\nJc3BucEDnpfMn7mh70XP13wInviOoGLRBp5Kqc8LnCBerF+1mdP/kEBXtQYN36Ql\nX9QFpPQKmnThAxKtFJ0HAzn7xtKnlRLics7gD01b1rw+qLlR32VnH00jFT7rIayj\nqQLM7ZTElbsr4yNdHZ/4kzStVQPM+SLqYXjpbdeK10UJ7K6+HyUdY/s53Y1fFsH9\nFufzP5bQ0qSkZxuA85Df8w6rZEP0Kbg1ljKYrjKt94Gs/+hD5QCvLQ5xHLa4t0Nv\ntjLubR7MqjY4CidFwsSqWQv/32rmTI3JC6l/gmcHmSsL1SozMI5PrrLAuD+JmRXR\n5pb4Ih7GXu7qGeatRUdqcLV6t3O2jrNG9O/miUBKPqblMuI4....\n-----END RSA PRIVATE KEY-----"

Открытый ключ

firebase functions:config:set test.publickey="-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAv9YlZ2msmHzpJ9y2qFVRUtjPKAsy5/Ig21DrKofCvq6/W3AxfWrQ\nlGmrJF/OJGr6NRo8dIlGaAyZ4DRbuJctCP4Ij2ibLH....==\n-----END RSA PUBLIC KEY-----"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...