Curl 我的代码适用于文本文件,但不适用于JPEG

Curl 我的代码适用于文本文件,但不适用于JPEG,curl,libcurl,s3fs,Curl,Libcurl,S3fs,我正在研制一种s3fs引信。我的工作是用RC4透明地加密文件。我已将加密添加到FdEntity::Read和Write函数(在fdcache.cpp中找到)中,但当我尝试复制jpeg文件(17kb)时失败(文件已复制,但图像已损坏),并且根据cmp,文件在4096字节后开始不同。但是,复制198kb的文本文件时不会出错 我知道的是:4kb是块的大小。 然而,s3fs直到20mb才进入“多部分模式”。即使如此,我还是用-o nomultipart禁用了multipart(我也在使用-o direc

我正在研制一种s3fs引信。我的工作是用RC4透明地加密文件。我已将加密添加到FdEntity::Read和Write函数(在fdcache.cpp中找到)中,但当我尝试复制jpeg文件(17kb)时失败(文件已复制,但图像已损坏),并且根据cmp,文件在4096字节后开始不同。但是,复制198kb的文本文件时不会出错

我知道的是:4kb是块的大小。
然而,s3fs直到20mb才进入“多部分模式”。即使如此,我还是用
-o nomultipart
禁用了multipart(我也在使用
-o direct\u io
)。
所以这可能不是因为多部分上传


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

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

问题只出现在jpeg上,而不出现在文本文件上,因为文本文件是同一个字符串反复出现