入力ストリームを暗号化し、TCP 経由で別のサーバーに送信したいと考えています。ここまでは順調ですね。接続が閉じられるまで、すべてがスムーズに実行されます。ほとんどの場合、必要な 192 ビットのブロック サイズが満たされず、スクリプトは でクラッシュしwrong final block length
ますが、自動パディングをオンにしました。
従来のインターフェースを使用している場合、自動パディングのみが機能するようです。ここで何か間違ったことをしていますか?
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-)Cipher Stream は、ソース ストリームが閉じられると、最後のブロックを自動的にパディングします。これは設計上の欠陥だと思います。
問題を開く以外に、この動作を回避するにはどうすればよいですか? Socket と (De-)Cipher Streams の間にバイト カウンターを配置する必要がありますか?