0

我有一个我正在研究的 s3fs-fuse 叉子。我的工作是使用 RC4 透明地加密文件。我已将加密添加到 FdEntity::Read 和 Write 函数(在 fdcache.cpp 中找到)但是当我尝试复制 jpeg 文件(17kb)时它失败(文件被复制,但图像已损坏)并且根据对于 cmp,文件在 4096 字节之后开始有所不同。但是,一个 198kb 的文本文件被复制而没有错误。

这是我所知道的:4kb 是一个块的大小。
但是,s3fs 直到 20mb 才会进入“多部分模式”。即便如此,我已经禁用了多部分-o nomultipart(我也在使用-o direct_io)。
所以这可能不是因为分段上传。

知道 4kb 之后可能会触发什么但仅在 jpeg 文件上触发吗?它可能与二进制文件与文本文件有关吗?

4

1 回答 1

0

我想到了。当您使用 RC4 对部分数据进行解密时,每个部分的大小必须与编码时的大小相同。但是,Read 作为参数接收到的大小大于 Write 接收到的大小(Read 将被要求读取 20480 字节,而 Write 上限为 4096)。因此,如果我试图读取整个 20480 字节的数据部分,加密就会失败。我的解决方案是将阅读量限制为 4096,即使我被要求阅读更多。S3fs 会自动调用该函数额外的次数以进行补偿。这个解决方案在技术上可能不是无懈可击的:不能保证每个非最终数据部分都通过写入在 4096b 块中加密,并且不能保证最终部分总是以特定大小的对齐方式加密(总大小模 4096 )。然而,

该问题仅出现在 jpeg 而不是文本文件上,因为文本文件是一遍又一遍地重复的相同字符串。

于 2016-04-19T15:11:41.907 回答