2017-02-27 6 views
0

ストリームから読み込み、暗号化して別のファイルに書きたい。 これは私のコードです:暗号化とストリーム経由でノード内のファイルを暗号化する

var fs = require('fs'); 
var crypto = require('crypto'); 
var infile = fs.createReadStream('a.dmg'); 
var outfile = fs.createWriteStream('b.dmg'); 
var encrypt = crypto.createCipher('aes192', 'behdad'); 
var size = fs.statSync('a.dmg').size; 
console.log(size); 
infile.on('data',function(data) { 
    var percentage = parseInt(infile.bytesRead)/parseInt(size); 
    console.log(percentage * 100); 
    var encrypted = encrypt.read(data); 
    console.log(encrypted); 
    if(encrypted){ 
     console.log(encrypted); 
     outfile.write(encrypted); 
    } 


}); 
infile.on('close', function() { 
    encrypt.end(); 
    outfile.close(); 

}); 

しかし、それは空のファイルを返し、encryptedはnullです。何が問題ですか?私はpipeを使いたくありません。

+0

「パイプ」を使用しない理由はありますか? –

答えて

1

あなたは本当に機能署名がread([size])で、dataのサイズではないので、代わりにStream#readCipher#updateCipher#finalを使用します。

var fs = require('fs'); 
var crypto = require('crypto'); 
var infile = fs.createReadStream('a.dmg'); 
var outfile = fs.createWriteStream('b.dmg'); 
var encrypt = crypto.createCipher('aes192', 'behdad'); 
var size = fs.statSync('a.dmg').size; 
console.log(size); 
infile.on('data',function(data) { 
    var percentage = parseInt(infile.bytesRead)/parseInt(size); 
    console.log(percentage * 100); 
    var encrypted = encrypt.update(data); 
    console.log(encrypted); 
    if(encrypted){ 
     console.log(encrypted); 
     outfile.write(encrypted); 
    } 
}); 
infile.on('close', function() { 
    outfile.write(encrypt.final()); 
    outfile.close(); 

});
+0

ありがとうございます。それは動作しますが、code = nullで終了しました。そしてファイルは完全に暗号化されません。 –

+0

これが完全に機能しない場合、どうしてあなたは私の答えを受け入れましたか? –

+0

VSCodeスクリプトランナーではなく端末でスクリプトを実行したときにうまくいったからです。 –

関連する問題