9
我想加密輸入流並通過TCP將它發送到另一臺服務器。到現在爲止還挺好。一切順利,直到連接關閉。幾乎在任何情況下,192位所需的塊大小都不符合,腳本崩潰wrong final block length
,儘管我打開了自動填充。如何處理Node.js加密碼流中的塊長度
看起來像自動填充只有在使用傳統界面時才起作用。我在這裏做錯了什麼?
var net = require("net")
, crypto = require("crypto");
var credentials = { algorithm: "aes192", password: "password" }
, decipher = crypto.createDecipher(credentials.algorithm, credentials.password)
, cipher = crypto.createCipher(credentials.algorithm, credentials.password);
decipher.setAutoPadding(true);
cipher.setAutoPadding(true);
net.createServer(function(socket) {
socket.pipe(socket);
}).listen(2000);
var socket = net.connect(2000);
socket.pipe(decipher).pipe(process.stdout);
process.stdin.pipe(cipher).pipe(socket);
socket.write("Too short.");
socket.end();
在我理想的Node.js世界中,(De-)密碼流將在源流關閉時自動填充最後一個塊。我認爲這是一個設計缺陷。
除了opening an issue,我該如何繞過這種行爲?我是否必須在Socket和(De-)密碼流之間放置一個字節計數器?
在回答之前,如果您在以下行中訪問加密,則不應使用'crypto = {algorithm:「aes192」,password:password}'。 –
哦,是的,對不起。我不得不砍掉它;原來這行是'this.crypto = {...};'。固定。 – buschtoens
請查看https://raw.github.com/philips/node-cryptostream/master/lib/cryptostream.js - 您的問題的應用程序非常罕見,或者我只是沒有得到您。 –