我有一个 Android 项目,它使用 C 库来解析某种类型的文件。我正在努力使用 AES 以及 CipherInputStreams 和 CipherOutputStreams 向项目添加加密。问题在于 Java 代码将文件名和描述符传递给 C 库,然后 C 库执行文件读取。事实上,如果文件被加密存储,C 库只会将该文件作为垃圾读取。有没有办法将 CipherInputStream 传递给 C 代码以便处理解密?或者我应该用 Java 解密文件并将其作为纯文本存储在私有(private)存储中,然后将其文件描述符发送到 C 代码?这看起来效率相对较低。
最佳答案
由于您可以修改 C 代码,因此我建议您直接在其中构建加密层。这样您的 Java 代码就不会关心它是否位于加密文件之上。
如果您确实希望在 Java 代码中包含该加密逻辑,那么我认为您需要在 Java 中进行 byte[] 读取,并将 InputStream.read 的每个结果传递给您的 C 代码。您可能需要为此更改 API,并需要一种方法来告诉 C 代码何时完成。
关于java - 在 C JNI 库中使用 Java InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128176/