所以我正在开发一个需要解密加密文件的应用程序。加密是用PHP完成的,用Java解密。我测试过,Java程序中的加密/解密没有问题。但是我的问题是我无法在Android中运行相同的应用程序。我需要找到如何获取加密数据。现在我更喜欢手动将它存储在assets文件夹中,只是为了测试而得到它:
AssetManager am = this.getAssets();
InputStream is = am.open("AUDIOVISUALFOTO02.pdf"); //or image file
之后我需要将解密文件保存在某处,这样我就可以看到解密是否也在设备上运行。所以基本上我需要找到一种方法如何从assets文件夹中获取加密文件作为示例以及在何处存储解密文件(不管在哪里)。这是我用于解密的代码:
package com.android.decrypt;
import java.io.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class DecryptPDFActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec keySpec = new SecretKeySpec("01234567890abcde".getBytes(), "AES");
IvParameterSpec ivSpec = new IvParameterSpec("fedcba9876543210".getBytes());
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
//FileInputStream fis = new FileInputStream(new File("encrypted.pdf"));
CipherInputStream cis = new CipherInputStream(fis, cipher);
FileOutputStream fos = new FileOutputStream(new File("decrypted.pdf"));
byte[] b = new byte[8];
int i;
while ((i = cis.read(b)) != -1) {
fos.write(b, 0, i);
}
fos.flush(); fos.close();
cis.close(); fis.close();
}
catch(Exception e)
{
e.fillInStackTrace();
Log.e("Error", "Damned ! : "+e);
}
}
}
所以欢迎任何有关如何做到这一点的帮助或建议。
答案 0 :(得分:0)
目前还不清楚你在问什么。
如果您尝试从资源文件夹中读取文件,则可以在SO上找到几个示例。
为什么不使用文件系统而不是apk中的assets文件夹?