file di Decifrare utilizzando createRead / WriteStream

voti
0

Sommario

upload di file con multer e decifrare il file utilizzando createRead / WriteStream. Sto usando Multer per ottenere file.path ma non voglio Multer caricare come lo faccio con creare / scrittura flusso

I dettagli dello sfondo:

  • Ho un'API che presenta un messaggio con i file (foto / documnets / video). Facendo che ho cifrare rispettivamente il mio messaggio e il file.
  • Ho caricato il mio file con multer da cui ottengo file.path. Colgo l'percorsofile (nella cartella locale) per crittografare con Crypto, createReadStream e writeStream.
  • Io uso postino per caricare il file e inviare il mio messaggio

Il mio problema

  • File è crittografato :: ma ho due file nella mia cartella file. Prima su è caricato multer e un altro è stato creato da createWriteStream. Ho bisogno solo quella che è criptato e non riesco a trovare un modo che sta per darmi l'indirizzo diretto dal postino al mio / flusso createRead scrittura.

Mi domanda la speranza è capito. Si prega di impegnarsi per qualsiasi chiarimento

Il mio codice:

messages.js

let image = '' ; let video = '';  let document = '';
    exports.postMessage = (req,res,next) =>{
    console.log(req.file)
var iv = crypto.randomBytes(16);

    const error = validationResult(req)
    if(!error.isEmpty()){
        console.log(error)
        return res.status(422).json({Error:'No message typed'})
    }

    if(req.file.mimetype === 'image/png' || req.file.mimetype=== 'image/jpg' || req.file.mimetype === 'image/jpeg'){
         image =  req.file.path;
         encryptFile(req,.+req.file.mimetype.split('/')[1]);
    }
    else if(req.file.mimetype === 'video/mp4' || req.file.mimetype === 'video/3gp' || req.file.mimetype === 'video/wmv'){
         video = req.file.path;
         encryptFile(req,.+req.file.mimetype.split('/')[1]);
    }
    else if(req.file.mimetype === 'application/png' || req.file.mimetype === 'application/msword' || req.file.mimetype === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || req.file.mimetype === 'application/vnd.openxmlformats-officedocument.presentationml.presentation'){
         document = req.file.path;
         encryptFile(req,.+req.file.mimetype.split('/')[1]);
    }
    else{
       return  res.status(402).json({Error:File Not Supported})
    }

    const messageId = mongoose.Types.ObjectId(); const wsId = mongoose.Types.ObjectId();
    const mobileNo = req.body.mobileNo; 
    const createdAt = Date(Date.now());
    const mes = req.body.message;
    let data = encrypt(mes);
    const text = new Text({
       messageId:messageId, wsId:wsId,
        photos:image, videos:video,
        mobileNo:mobileNo,
        file: document,
        createdAt:createdAt,
        message:data['encryptedData'],
        iv:data['iv'],
        //key:data['key']
       // key:key
    })

  return  text.save()
        .then(message => {
            return res.status(200)
                .json(message)
        })
        .catch(err => {
            console.log(err)
            return res.status(500).json(err)
        })  

}

function encrypt(text) {
 let cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(key), iv);
 let encrypted = cipher.update(text);
 encrypted = Buffer.concat([encrypted, cipher.final()]);
 return { iv: iv.toString('hex'), encryptedData: encrypted.toString('hex'), key:key };
}

function decrypt(text,ivec,key) {
 let iv = Buffer.from(ivec, 'hex');
 let encryptedText = Buffer.from(text, 'hex');
 let decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(key), iv);
 let decrypted = decipher.update(encryptedText);
 decrypted = Buffer.concat([decrypted, decipher.final()]);
 return decrypted.toString();
}


/**
 * @description to encrypt file
 * @param filePath
 * @param type
 */

encryptFile = (filePath, type)=>{
    console.log(filePath)
    try {
        let cipher = crypto.createCipher(algorithm,password);
        //let decipher = crypto.createDecipher(algorithm,password)
        let input = fs.createReadStream(filePath.file.path);
        let fileName = './files/'+new Date().valueOf().toString().trim()+type;
        let output = fs.createWriteStream(fileName,{flags:'a'});
        input.pipe(cipher).pipe(output);
        output.on('finish',()=>{
            console.log('done')
            decryptFile(fileName,type);
        })    
    } catch (error) {
        console.log(error);
    }
}

/**
 * @description to decrypt file
 * @param filePath path of file
 * @param type, type of file(mimetype)
 */
decryptFile = (filePath,type)=>{
    let decipher = crypto.createDecipher(algorithm,password)
    let input = fs.createReadStream(filePath)
    let output = fs.createWriteStream('./files/'+new Date().valueOf().toString().trim()+type,{flags:'a'});
    input.pipe(decipher).pipe(output)
    output.on('finish',()=>{
        console.log('done-image');

})}

Codice Multer qui:

const fileStorage = multer.diskStorage({
    destination:(req, file, cb ) =>{
        cb(null,'files')
    },
    filename:(req, file, cb) => {
        cb(null, file.originalname)
    }
})

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended:false}))
app.use(multer({storage:fileStorage}).single('file'))
È pubblicato 14/12/2019 alle 23:42
fonte dall'utente
In altre lingue...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more