Android从CipherInputStream读取文件而不重写文件
是否有人知道如何读取解密文件而不将其重写为原始文件 下载文件后,文件会自动加密。当我想打开文件时,文件将首先被解密,但问题是如何从CipherInputStream读取文件,这样就不需要将文件转换回原始文件Android从CipherInputStream读取文件而不重写文件,android,encryption,Android,Encryption,是否有人知道如何读取解密文件而不将其重写为原始文件 下载文件后,文件会自动加密。当我想打开文件时,文件将首先被解密,但问题是如何从CipherInputStream读取文件,这样就不需要将文件转换回原始文件 void decrypt(File file1, String nama) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { md5
void decrypt(File file1, String nama) throws IOException, NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeyException {
md5 hash = new md5();
String sapi = hash.md5(nama);
FileInputStream fis = new FileInputStream(file1+ "/" + sapi);
FileOutputStream fos = new FileOutputStream(file1 + "/decrypted.json");
SecretKeySpec sks = new SecretKeySpec("MyDifficultPassw".getBytes(),
"AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, sks);
CipherInputStream cis = new CipherInputStream(fis, cipher);
int b;
byte[] d = new byte[8];
while ((b = cis.read(d)) != -1) {
fos.write(d, 0, b);
}
fos.flush();
fos.close();
cis.close();
}
我可以打开解密的文件,但如果我使用上面的代码,它将在加密文件和原始文件之间复制
FileOutputStream fos = new FileOutputStream(file1 + "/decrypted.json");
写入作为解密方法的第一个参数传入的文件对象
decrypt(File file1 ...
这也是您正在读取的文件对象。
所以当你做fos.write时(d,0,b)代码>您正在写回文件对象,该文件对象与您正在读取的对象相同
因此,要么写入另一个文件,要么根本不写任何东西。
新的FileOutputStream
方法可以采用文件名,而不是相关摘录状态所述的文件对象
FileOutputStream(字符串名称,
布尔(追加)
创建文件输出流,以使用指定的
名称如果第二个参数为true,则将写入字节
文件的结尾而不是开头。一种新的文件描述符
对象被创建来表示此文件连接
首先,如果有安全管理器,则调用其checkWrite方法
以名称作为其参数
如果文件存在,但它是目录而不是常规文件,则
不存在但无法创建,或无法为任何其他文件打开
然后引发FileNotFoundException
因此,您可能需要FileOutputStream fos=newfileoutputstream(“/decrypted.json”,true | false)
根据是否要附加或覆盖文件,将第二个参数设置为true或false
要为您的问题提供准确的解决方案有点困难,因为您没有清楚地说明您想要的结果是什么,所以我做了一些假设,这些假设可能是错误的,但无论哪种方式,如果您不想将数据写入文件超流
,以上内容都应该可以帮助您找到所需的解决方案,只需将其替换为ByteArrayOutputStream
。