Расшифровать большой файл с помощью crypto nodejs - PullRequest
0 голосов
/ 28 февраля 2019

Я расшифровываю большой файл ( 450 МБ ).

Я читаю файл с fs.createReadStream и расшифровываю с crypto-js .

Файл был зашифрован в UTF8.

Содержимое файла в формате JSON.

МОЯ ФУНКЦИЯ:

function decryptFile(srcDir, fileName, destDir) {

    let encryptedPath = path.join(srcDir, fileName);
    let decryptedPath = path.join(destDir, fileName).replace('.xam', '.json');

    console.log('DECRYPTING XAM FILE ' + encryptedPath + ' TO ' + decryptedPath);

    const input = fs.createReadStream(encryptedPath);

    input.once('readable', () => {

        const decipher = crypto.createDecipher('xxx-xxx-xxx', 'XxxX');

        const output = fs.createWriteStream(decryptedPath);

        input.pipe(decipher).pipe(output).on('finish', () => {

            console.log('FILE DECRYPTED');

        }).on('error', error => {

            console.log(error);

        });

    });
}

ОБНОВЛЕНИЕ ОШИБКА:

Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
    at Decipher._flush (crypto.js:158:28)
    at Decipher.prefinish (_stream_transform.js:137:10)
    at emitNone (events.js:106:13)
    at Decipher.emit (events.js:208:7)
    at prefinish (_stream_writable.js:602:14)
    at finishMaybe (_stream_writable.js:610:5)
    at afterWrite (_stream_writable.js:464:3)
    at onwrite (_stream_writable.js:454:7)
    at Decipher.afterTransform (_stream_transform.js:90:3)
    at Decipher._transform (crypto.js:153:3)

ОБНОВЛЕНИЕ Заголовок

1 Ответ

0 голосов
/ 28 февраля 2019

Я реализовал то же самое, чтобы смоделировать вашу проблему.я получил ту же ошибку.Вы столкнулись с известной проблемой.Пожалуйста, следуйте этому руководству.http://vancelucas.com/blog/stronger-encryption-and-decryption-in-node-js/ это работает.проверил это.

const crypto2 = require('crypto');
var fs = require('fs');


function decryptFile(fileName) {

    const input = fs.createReadStream(fileName+'.encrypted');
    const output = fs.createWriteStream(fileName+'.unencrypted');


        const initVect = crypto2.randomBytes(16);
        const CIPHER_KEY = new Buffer('12345678901234567890123456789012');
        const decipher =  crypto2.createDecipheriv('aes-256-cbc', CIPHER_KEY, initVect);


        input.pipe(decipher).pipe(output).on('finish', () => {

            console.log('FILE DECRYPTED');

        }).on('error', error => {

            console.log(error);

        });
}

function encryptFile(fileName) {

    const initVect = crypto2.randomBytes(16);
    const CIPHER_KEY = new Buffer('12345678901234567890123456789012');


    var aes = crypto2.createCipheriv('aes-256-cbc', CIPHER_KEY, initVect);

    const input = fs.createReadStream(fileName);
    const output = fs.createWriteStream(fileName+'.encrypted');

    input 
      .pipe(aes)  
      .pipe(output)  
      .on('finish', function () {  
        console.log('done encrypting');
      });
} 

encryptFile('cas_01.cas');
//decryptFile('cas_01.cas');  
...