2016-04-17 20 views
0

私が取り組んでいるs3fs-fuseのフォークがあります。私の仕事は、RC4でファイルを透過的に暗号化することです。私はFdEntity :: ReadとWrite関数(fdcache.cppにあります)に暗号化を追加しましたが、jpegファイル(17kb)をコピーしようとすると失敗します(ファイルはコピーされますが、画像は壊れています)。 cmpにすると、ファイルは4096バイト後に始まります。しかし、198kbのテキストファイルがエラーなくコピーされます。私のコードはテキストファイルではありますが、jpegsではありません

これは私が知っているところです:4kbはブロックのサイズです。
しかし、s3fsは20mbまで "マルチパートモード"にはなりません。それでも、-o nomultipart(私も-o direct_ioを使用しています)でマルチパートを無効にしました。
マルチパートアップロードのためではないでしょうか。

4kb後にトリガされる可能性があるのは何ですか?jpegファイルのみです。それはバイナリ対テキストファイルに関連していますか?

答えて

0

私はそれを理解しました。 RC4を使用してデータを部分的に復号化する場合、各部分のサイズはエンコードされたときと同じでなければなりません。しかし、引数として受け取ったReadのサイズは、Writeが受け取ったサイズよりも大きかった(Readは20480バイトを読み出すように要求され、Writeは4096で終了した)。したがって、20480バイトのデータ全体を読み取ろうとすると、暗号化に失敗します。私の解決策は、たとえ私がもっと読むように求められたとしても、読んだ金額を4096にクランプすることでした。 S3fsは自動的に関数を追加的に呼び出して補正します。この最終的なセクションが常に特定のサイズのアライメントで暗号化されているという保証はありません(合計サイズは4096をモジュロにします)。これは技術的に気密ではないかもしれません。 )。しかし、このソリューションは私の目的には十分でした。

この問題は、テキストファイルが同じ文字列で何度も何度も繰り返していたため、jpegにのみ表示され、テキストファイルには表示されませんでした。

関連する問題