在JNI库中使用Java InputStream
我有一个Android项目,它使用一个C库来解析某种类型的文件。我正在使用AES、CipherInputStreams和CipherOutputStreams为项目添加加密。问题是Java代码将文件名和描述符传递给C库,然后C库执行文件读取。按原样,如果文件是加密存储的,C库只会将文件作为垃圾读取。有没有一种方法可以将密码流传递给C代码,以便处理解密?或者我应该用Java解密文件并将其以明文形式存储在私有存储器中,然后将文件描述符发送到C代码中吗?这似乎效率相对较低。因为您可以修改C代码,所以我建议您直接在其中构建加密层。这样,您的Java代码就不会在意它是否位于加密文件之上在JNI库中使用Java InputStream,java,android,c,java-native-interface,Java,Android,C,Java Native Interface,我有一个Android项目,它使用一个C库来解析某种类型的文件。我正在使用AES、CipherInputStreams和CipherOutputStreams为项目添加加密。问题是Java代码将文件名和描述符传递给C库,然后C库执行文件读取。按原样,如果文件是加密存储的,C库只会将文件作为垃圾读取。有没有一种方法可以将密码流传递给C代码,以便处理解密?或者我应该用Java解密文件并将其以明文形式存储在私有存储器中,然后将文件描述符发送到C代码中吗?这似乎效率相对较低。因为您可以修改C代码,所以我
如果您确实希望在Java代码中包含该加密逻辑,那么我认为您需要在Java中读取字节[],并将InputStream.read的每个结果传递给您的C代码。您可能需要为此更改API,并需要一种方法在完成时告知C代码。由于您可以修改C代码,因此我建议您直接在其中构建加密层。这样,您的Java代码就不会在意它是否位于加密文件之上
如果您确实希望在Java代码中包含该加密逻辑,那么我认为您需要在Java中读取字节[],并将InputStream.read的每个结果传递给您的C代码。为此,您可能需要更改API,并需要一种在完成时告知C代码的方法。您完全控制C代码吗?你可能需要修改API来完成你想要完成的事情是的,我可以控制C代码。你完全控制C代码吗?您可能需要修改API以实现您想要的功能是的,我可以控制C代码。谢谢您的帮助!我将尝试这些选项。我只是在构思该做什么时遇到了一些困难。谢谢你的帮助!我将尝试这些选项。我只是在构思该做什么时遇到了一些困难。