web-dev-qa-db-ja.com

Android:パスワードを暗号化する

重複の可能性:
パスワードの保存

パスワードを保存するために共有設定を使用しています。パスワードデータをそのまま保存しても安全ですか、それとも保存する前に暗号化する必要がありますか。サンプルコードを手伝ってください。

前もって感謝します、

14
upv

パスワードを直接保存しないでください。代わりに、パスワードのハッシュを保存してください。

1
Flo

簡単な答え:それはかなり安全です。

長い答え:まず、ユーザーがWeb /リモートサービスにログインできるようにするアプリケーションを作成している場合は、 AccountManager を調べることをお勧めします。 APIを学び、それと統合するのは少し難しいですが、いくつかの素晴らしい利点があります。

  1. 単純な複数アカウント管理(すべてのアカウントはAccountManagerに保存されます)。
  2. SyncAdaptersを追加する機能(AccountManagerは適切なアカウントでアダプターを呼び出すため、書き込みはかなり簡単になります。各アカウントの同期を手動で実行する必要はありません) 。
  3. アプリはSettings > Accounts & syncの下に表示されます。

ドキュメントの サンプル同期アダプター を確認してください-AccountManagerの使用方法を示しています(同期のものが必要ない場合は無視してかまいません)。

次に、パスワードの保存の安全性について説明します(以下は、パスワードをSharedPreferencesAccountManagerの両方に保存する場合に有効です)。アプリケーションが実行されているデバイスがルート化されていない限り、完全に安全です。他のアプリはありませんが、あなたのアプリがパスワードを読み取ることができます。 USBケーブルを使用して電話をPCに接続し、adb pullを使用してそれぞれのファイルを取得しようとすると、パスワードを読み取ることさえできません。

ただし、電話がルート化されている場合、ルートアクセスを取得するすべてのアプリがパスワードを読み取ることができます。また、adb pullは機能し、数秒でパスワードを取得できます。

このため、暗号化をお勧めします(特に、Web /クラウド/リモートサービスが機密データを保持している場合)。私は前回のプロジェクトで SimpleCrypto を(AccountManagerと一緒に)使用しましたが、かなりうまく機能します。ご参考までに、「マスターパスワード」には定数を使用しました。セキュリティを強化するために、最終ビルドを難読化しました( 方法を確認してください )。

26
Felix

パスワードをプレーンテキストで保存することは決して安全ではありません。最近ソニーに何が起こったのか覚えていますか?

任意の Java暗号化技術 で十分です

4
Reno