3

ライブラリを含むアプリケーションがアクセスできない場所でデータをカプセル化して保存する必要があるSDKプロジェクトを作成したいと思います。データは、HTTPSを介してライブラリによって受信されます。Androidライブラリプロジェクト内のデータカプセル化

Androidのライブラリがコンテキストを所有しておらず、共有されている環境のデータのみが親アプリケーションに表示されるため、共有環境設定はオプションではないことを調査しました。

このような機密データを保存して、libを使用するアプリケーションから非表示にする最良の方法は何ですか?私は商業的ツールでコードの難読化アプローチを使用して、このデータをできるだけハードなものにすることを計画しています。だから多分私はAndroidのキーストアシステムを使用するか、単純な暗号化で十分でしょうか?

編集:いいえ、データを暗号化して保存する唯一の方法は、それを暗号化する方法の1つです。しかし、別の質問があります:親アプリがRAMにアクセスしそこからデータを読み取ることを妨げるでしょうか?デバイスがルートされていないと仮定します。

+1

NDKを使用してコードをネイティブに作成するので、ビジネスロジックの一部がバイナリライブラリで安全です。 – betorcs

+0

はい、これは有効なオプションの1つですが、私はすでにネットワークAPIキーを格納するためにこのアプローチを採用しています – bvk256

答えて

0

SQLiteをデータストレージとして使用できます。外部ライブラリへの依存よりも優れています(あなたの場合はライブラリをコーディングしているからです)。それを軽く保ちましょう。

各DBインスタンスには独自の名前があり、アプリケーションはその名前でアクセスします。可能な解決策として、はDBインスタンスの名前をエンコードし、実行時にデコードします。これにより、開発者からアクセスポイントが隠されます。

SQLiteOpenHelperクラスを実装:Utils.decode("Ylhsd1lYTnpkMjl5WkE9PQ==")はあなたが右のDB名を取得するために実行する方法である

。もちろん

com.myrpoject.mypackage.g.h.a(com.myrpoject.mypackage.g.h.a("Ylhsd1lYTnpkMjl5WkE9PQ==")) 

Ylhsd1lYTnpkMjl5WkE9PQ==は単なるサンプルであり、あなたが他を使用することができます。難読化した後、あなたのコードは次のようになります。第2ステップの詳細は

Check this answerです。

+0

これはおそらく共有設定の中で暗号化されたデータを使用するのと同じです。 – bvk256

+0

あなたのlibはあなたのキーではなく親のコンテキストを使用します。開発者はあなたのDB作成にアクセスすることはできません。もちろん、SharedPrefsでも同じことができます。ここの主なポイントは、データを格納する方法ではなく、隠した名前です。 – Val

関連する問題