我想加密输入流并通过 TCP 将其发送到另一台服务器。到目前为止,一切都很好。一切顺利,直到连接关闭。wrong final block length
尽管我打开了自动填充,但几乎在任何情况下都没有满足所需的 192 位块大小并且脚本崩溃。
似乎自动填充仅在使用旧版界面时才有效。我在这里做错了吗?
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 会在源流关闭时自动填充最后一个块。我认为这是一个设计缺陷。
除了打开问题之外,我该如何规避这种行为?我是否必须在套接字和(解密)密码流之间放置一个字节计数器?