問題タブ [cryptostream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - File() を介して Stream を返すと、将来の操作で「別のプロセスによって使用されているため、プロセスはファイル パスにアクセスできません」がスローされます。
ファイルをクライアントに返すときのメモリ使用量を減らすために、復号化中にストリームを使用しました。これは、同じファイルをサーバーにアップロードして戻すとき (たとえば、クライアントがファイルを変更したとき) の 1 つの癖までは正常に機能していました。.netコアが「別のプロセスで使用されているため、プロセスはファイルパスにアクセスできません」をスローします。
このシステムはまだ開発中なので、アプリケーションをリリースではなくデバッグ モードで実行するのが癖なのかどうかはわかりません。コードをリリースに組み込みましたが、それでも同じエラーが発生しました。
ストリームがどのように機能するかを知っていることから、ストリームは自動的に破棄されるはずです。
ストリームを作成する最初のメソッドには、次のものが含まれます。
次に、復号化メソッドは次の処理を実行します。
次に、crypto メソッドを呼び出します。
これは、以下を返すコントローラーにチェーンを戻します。
私がこれを開発していたとき、これらのいずれかを使用中にラップすると、オブジェクトが破棄された例外が発生するように見えましたが、何か間違ったことをした可能性があります。
誰もこのようなものを修正する方法を知っていますか?
c# - C# からの crypto-js DES 復号化
DES 暗号化を使用する C# 暗号化方式があります。私が作成しているnode.js APIでその値を復号化する必要があります。API で復号化メソッドのほとんどを再作成することができましたが、復号化するシークレットと値を渡すと、別の結果が得られます。
暗号化.cs
これは私が継承したコードです。これまでのところ、これを再作成することができました。
app.js
シークレットのハッシュ プロセスは、私が再作成できたものtrunc
であり、APIの値がHashKey
メソッドが出力するバイト配列と同じであることを確認しました。
ただし、var bytes = CryptoJS.DES.decrypt(decoded, key, { iv: key });
それを使用して単純な暗号化を行うと、C#メソッドとは異なる暗号化された値が得られるため、復号化が失敗すると思います。
私が見つけたものですが、対処方法がわからないのは、キーの値と復号化する値を渡すときに、それらが文字列である必要があるということですが、C# バージョンでは、CryptoStream はバイト配列を取るため、私がしなければならないことは何ですか?復号化する値を文字列として渡しますが、これが効果があるかどうかはわかりません。キーについても同じことがDESCryptoServiceProvider
言えます。 はキーと iv をバイト配列として受け入れますが、crypto-js 切り捨てられた配列を変換すると、バイト配列のリテラル テキストが変換されるだけです。現在、次を使用してその変換を試みています。
プロセスのステップを見逃していますか? 何か見逃していませんか?
.net - CryptoStream を破棄すると最終ブロックがフラッシュされますか?
Microsoft .NET API から、次の情報を抽出できます。
using
の実装を呼び出しIDisposable.Dispose()
ます。IDisposable.Dispose()
Flush()
任意のStream
インスタンスを呼び出す必要があります。CryptoStream.Close()
を呼び出しますCryptoStream.FlushFinalBlock()
。
ただし、これは仕様にギャップを残すようです:CryptoStream
インスタンスを破棄すると も呼び出さCryptoStream.FlushFinalBlock()
れますか?もしそうなら、これはどこに文書化されていますか?