我有一个加密算法(AES),它接受转换为数组字节的文件并对其进行加密。由于我要处理一个非常大的文件,JVM可能会内存不足。我打算读取多个字节数组中的文件,每个字节数组包含文件的某些部分。然后我迭代地输入算法。最后,我将它们合并以生成一个加密文件。所以我的问题是:有什么方法可以将一个文件逐个读取成多个字节数组吗?我想我可以使用以下命令将文件读取为字节数组:IOUtils.toByteArray(InputStreaminput).然后使用以下方法将数组拆分为多个字节:Arrays.copyOfRange()但我担心将文件读取到ByteArray的代码会使JVM内存不足。
我有一个由另一个OutputStream支持的CipherOutputStream。在我将所有需要加密的数据写入CipherOutputStream之后,我需要附加一些未加密的数据。ThedocumentationforCipherOutputStream表示调用flush()不会强制将最后一个block从加密器中取出;为此,我需要调用close()。但是close()也会关闭底层的OutputStream,我仍然需要对其进行更多的编写。如何在不关闭流的情况下强制从加密器中取出最后一个block?我需要编写自己的NonClosingCipherOutputStream吗?
我一直在按照教程“HowdoIencryptanddecryptfilesusingDES?”向现有的Android4+应用程序添加简单的文件加密。一切正常,除了加密和解密非常非常慢。以下两种方法几乎是完整的教程:publicstaticvoidencryptOrDecrypt(Stringkey,intmode,InputStreamis,OutputStreamos)throwsThrowable{DESKeySpecdks=newDESKeySpec(key.getBytes());SecretKeyFactoryskf=SecretKeyFactory.getInstance(
其实我在网上和stackoverflow里也查了很多,最初我在加密和解密时不使用填充,但最后我从这里得到了解决方案https://stackoverflow.com/a/10775577/1115788我用AES/CBC/PKCS5Padding填充更新了我的代码同样的错误来了,最后一个block没有解密......过去两天我一直在研究这个问题,但没有找到解决方案我的密码:packagemani.droid.browsedropbox;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputS