希望有人知道答案......
背景
我在PHP中创建了一个小程序,使用密码AES,密钥长度256位和分组密码CBC加密(大)文件。 现在,因为文件非常大,我无法将整个文件提供给加密例程(内存溢出)所以我不得不一次将文件块化为4128字节,并将每个块发送到加密例程。结果加密的块变为4128 + 16字节长(AES填充16个),我将它们写入一个文件(一串块=>加密文件)。
通常情况下,如果我通过openssl加密该文件,它将只填充最后一个块。在我的情况下,因为我必须一次读取一个块,所以我必须在每个块中执行此操作(请记住,作为AES的128位AES垫使用固定的128位块)。
问题
我正在尝试使用openssl实用程序解密此文件。问题是openssl不知道我的加密文件只是在最后但不是每个块(4128 + 16字节)填充。因此它将删除最后一个块填充,但每隔一个块包含16个字节(让它们称之为垃圾)。如果我编码一个纯文本文件,我会看到垃圾,我会理解这是一个解密问题。如果文件是二进制文件(图片,可执行文件等),那么文件可能不会被解释/加载。
问题
openssl实用程序是否有任何选项允许我告诉它输入文件必须一次解码为X字节的块而不是整个文件? 您是否看到针对此类问题的其他解决方案?