入力ストリームを暗号化して、それをTCP経由で別のサーバに送信したいとします。ここまでは順調ですね。接続が閉じられるまで、すべてがスムーズに実行されます。ほとんどの場合、192ビットの必要なブロックサイズは満たされず、スクリプトはwrong final block length
でクラッシュしますが、自動パディングはオンになっています。Node.js暗号化ストリームのブロック長の扱い方
レガシーインターフェイスを使用すると、自動埋め込みのように見えます。私はここで何か間違っていますか?私の理想的な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();
、(縮小)暗号ストリームパッドソースストリームが閉じられている最後のブロックを、自動的だろう。私はこれが設計の欠陥だと思う。
opening an issue以外に、この現象を回避するにはどうすればよいですか?ソケットと(De-)暗号ストリームの間にバイトカウンタを置く必要がありますか?
次の行で暗号にアクセスする場合は、応答する前に 'crypto = {algorithm: 'aes192"、password:password} 'を使用しないでください。 –
ああ、申し訳ありません。私はそれをカットしなければならなかった。もともとこの行は 'this.crypto = {...};'でした。一定。 – buschtoens
https://raw.github.com/philips/node-cryptostream/master/lib/cryptostream.jsを確認してください。問題のアプリケーションは非常にまれです。 –