3

私は安全なアプリケーションを実行しています。このアプリケーションでは、ユーザーがファイルを参照して、電話にあるアプリケーションでそれらを開くことができます。したがって、今のところ、私のアプリケーションは本当に安全で、ファイルは十分に暗号化されていますが、1つの大きな中断があります。実際、私は自分のアプリケーションを使用して、さまざまなタイプ(pdf、doc、txt、jpgなど)のユーザーセキュアファイルを開いているので、ユーザーの電話にある外部アプリケーションを使用してそれらを開きます。しかし、私の問題はここにあります。別のアプリケーションにこれらのファイルを開かせるには、使用するアプリケーションにAndroidの保存場所を提供する必要があるためです。

これが私が今使っているコードです:

Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File fileToOpen = new File(activity.getExternalCacheDir().getAbsolutePath() + 
    "/" + fileName);

MimeTypeMap mime = MimeTypeMap.getSingleton();
String extension = fileToOpen.getName().substring(
        fileToOpen.getName().lastIndexOf(".") + 1);
String type = mime.getMimeTypeFromExtension(extension);
intent.setAction(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(fileToOpen), type);

Manager.getActivity().startActivityForResult(intent,
        ExplorerActivity.FILE_CLOSED_SUCCESSFULLY);

したがって、私のコードでわかるように、実際のファイルをキャッシュディレクトリに保存して開く必要があります。したがって、泥棒がユーザーの電話にアクセスできる場合は、このディレクトリにある実際のファイルを開くことができるため、アプリケーションは次のようになります。もう安全ではありません。もちろん、このプレーンファイルは、ユーザーが閉じて暗号化した直後に削除しますが、削除しても、ファイルが電話から完全に削除されるわけではありません。削除する前に、ヌルバイトで書き換えていますが、このファイルを安全に削除するには不十分です。

だから今、私があなたに望んでいることは、私がやりたいことを達成するためのアイデアです:Androidのハードストレージに保存せずにファイルを開きます。

これが私が持っていたいくつかのリードです:

  • 自分のアプリでファイルを開きます(ただし、ファイルの種類が多すぎるため、実装するのが大変で、すでに存在するものを開発するのは本当に好きではありません)
  • アプリケーションの外部に保存せずにファイルを開くための解決策を見つけます(つまり、このファイルのバイト配列を使用してファイルを直接開くことです)
  • ファイルを電話のRAMに保存します(それが可能かどうかはわかりません)

したがって、これは網羅的なリストではなく、他の提案をいただければ幸いです。そして、私が提案した解決策の1つについて何か助けがあれば、遠慮なくお願いします。私のアイデアの1つが完全に不可能か間違っているかどうかも、遠慮なく教えてください。

4

1 に答える 1

4

contentProviderオーバーライドする独自のopenFileファイルを試したことがありますか。そのため、アプリ専用のファイルが開いて、filedescriptor他のアプリにアクセスできるファイルが返されます。

于 2012-09-12T10:47:12.890 に答える