Ошибка неправильного дешифрования при дешифровании с использованием приватного дешифрования (publicEncrypt, privateDecrypt)

Я крипто NodeJs v10.14.2 для создания пары асимметричных ключей. Открытый и закрытый ключи созданы успешно. После этого я хочу зашифровать строку с помощью открытого ключа и расшифровать с помощью закрытого ключа, но в этом случае шифрование работает с publicEncrypt, но после этого использование privateDecrypt дает ошибку плохого дешифрования

Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt.

Вот мой код

const { writeFileSync } = require('fs')
const { generateKeyPairSync, publicEncrypt, publicDecrypt, privateEncrypt, privateDecrypt } = require('crypto')
const passphrase = "1234567890"
function generateKeys() {
    const {
        privateKey,
        publicKey
    } = generateKeyPairSync('rsa', {
        modulusLength: 1024,
        publicKeyEncoding: {
            type: 'pkcs1',
            format: 'pem',
        },
        privateKeyEncoding: {
            type: 'pkcs1',
            format: 'pem',
            cipher: 'aes-256-cbc',
            passphrase,
        },
    })

    encryptD(publicKey, privateKey) 
}
let string = "Hello this string will be encrypted"
function encryptD(publicKey, privateKey)
{
    let buf = Buffer.from(string)
    console.log(buf)
    //<Buffer 48 65 6c 6c 6f 20 74 68 69 73 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 65 6e 63 72 79 70 74 65 64>
    let encData = publicEncrypt(publicKey, buf)
    console.log("Encrypted Buffer", encData)
    //Encrypted Buffer <Buffer 1b bc fb ee ba c3 90 ca 87 37 3c 6a 0b 38 4b bd 92 8a 7c 1e 7c dd 06 26 58 5f 0b 35 f6 81 8f 55 58 03 db e2 a5 4d 2b d2 41 32 31 5e 6b 2a 62 e7 d6 b6 ... >
    let dncData = privateDecrypt(privateKey, encData)
    //Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
    console.log("decrypted ", dncData)
}
generateKeys()

Понятия не имею, где я делаю неправильно. Спасибо за помощь

1 ответ

Зависимости:

       const crypto = require('crypto');
    const fs = require('fs');
    const { RSA_PKCS1_PADDING } = require('constants');
    const { privateKeyDecrypt } = require('crypto');

Зашифровать:

      // Encrypting the pased string
function encryptString(publicKeyFile, plaintext) {
    const publicKey = fs.readFileSync(publicKeyFile, "utf8");
  
    // Encrypting data using publicEncrypt() method and a public key
    const encrypted = crypto.publicEncrypt(publicKey, Buffer.from(plaintext));
  
    return encrypted.toString("base64");
  }
  
// Usagge
const publicKeyFile = '../public_key.pem';
const decryptedData = 'Hello World';

// Encriptar los datos
const encryptedData = encryptString(publicKeyFile, decryptedData);
console.log('Encrypted data:', encryptedData);

Расшифровать:

      function decryptString(privateKeyFile, ciphertext) {
  const privateKey = fs.readFileSync(privateKeyFile, "utf8");

  // Convert the private key to a KeyObject
  const privateKeyObject = crypto.createPrivateKey({
    key: privateKey,
    format: "pem",
    type: "pkcs8",
  });

  // Decrypt the ciphertext using privateDecrypt() method
  const decrypted = crypto.privateDecrypt(
    {
      key: privateKeyObject,
    },
    Buffer.from(ciphertext, "base64")
  );

  return decrypted.toString("utf8");
}

// Ussage
const privateKeyFile = "../private_key.pem";
const encryptedData = readTextFile("encrypted_data.txt");

// Decrypting
const decryptedData = decryptString(privateKeyFile, encryptedData);
console.log("Decrypted data:", decryptedData);

Обычно я делаю что-то подобное. Может быть, вы сможете проверить это и, надеюсь, найдете вдохновение или подсказку.

Другие вопросы по тегам