0

我想以私有模式解密加密的 apk 文件,我知道可以将其解密到特定位置。

我使用以下代码将其解密为 sdcard。

FileInputStream fis = new FileInputStream("/sdcard/encrypted.apk");

FileOutputStream fos = new FileOutputStream("/sdcard/decrypted.apk");
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();

}

但是是否可以在私有模式下解密 apk 文件...?

4

1 回答 1

1

看起来你把事情搞混了。如果要在应用程序的数据目录中创建文件,则使用MODE_PRIVATE 或详细的Context.MODE_PRIVATE 。

使用 MODE_PRIVATE 根本不使用加密,它只是设置文件访问权限,以便只有应用程序本身可以访问文件。

在许多设备上,该/sdcard部分是一个单独的分区或使用 fat32 格式化的 sd 卡 - 它根本不支持文件级别的权限。因此 MODE_PRIVATE 在路径上不起作用。

如果您需要 MODE_PRIVATE 中的 FileOutputStream,您可以简单地调用:

FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE);

上下文是您的应用程序的上下文。它至少可以在应用程序的私有数据目录中工作。

于 2013-01-24T12:42:47.543 回答