2012-03-13 8 views
2

感謝を解読し、私がダウンして、基本的なコードを取得することができましたここでは一例Process the value of preference before save in Android?ベースEditTextPreferenceを拡張し、DMONする

/暗号化します。しかし、私の価値はデバイス上のpreferences.xmlに暗号化されて保存されていません。私はこれが自分の部分(java初心者)の単純な間違いであることを知っています。

私の暗号化および復号化クラスは、EditTextPreferenceコードの外で動作しています。

種類よろしく、

マイク

マイあるpreferences.xml

<ping.test.com.EncryptedEditTextpreference 
     android:key="key" 
     android:summary="Enter Your Public Key" 
     android:title="Public Key" 
     android:inputType="textPassword"/> 

</PreferenceCategory> 

EditTextPreference

package ping.test.com; 

import android.content.Context; 
import android.preference.EditTextPreference; 
import android.util.AttributeSet; 

public class EncryptedEditTextPreference extends EditTextPreference { 
    public EncryptedEditTextPreference(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    } 

    public EncryptedEditTextPreference(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    public EncryptedEditTextPreference(Context context) { 
    super(context); 
    } 

    @Override 
    public String getText() { 
    String value = super.getText(); 
    try { 
     return SimpleCrypto.decrypt("BiteMe", value); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return value; 
    } 

    @Override 
    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 
    super.setText(restoreValue ? getPersistedString(null) : (String) defaultValue); 
    } 

    @Override 
    public void setText(String text) { 

     try { 
      super.setText(SimpleCrypto.encrypt("BiteMe", text)); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

答えて

0

ファーストを拡張する私のクラス、私は、それがPreference見解を持っていると便利だ知っていますあなたの特別なケースでは、私は簡単なEditTex tを開き、SharedPreferencesの中に手動で設定を保存します。

あなたの質問に答えるには:ドキュメントによれば、それはうまくいくはずです。

@Override 
public void setText(String text) { 
    Log.v("setText", "from " + text); 
    try { 
     String to = SimpleCrypto.encrypt("BiteMe", text); 
     Log.v("setText", "to " + to); 
     super.setText(to); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

は期待のようなあなたのSimpleCryptクラスが動作することを、確認してください、あなたはのEditTextにTextWatcherを追加し、何が起こるかを確認するためにも、それをログに記録可能性があります。エラーに近づくために、次のようにログを追加してみてください。

攻撃者があなたのapkを逆コンパイルしてこの暗号化の仕組みを見ることができるので、これはまったく安全ではないことに注意してください。

+0

私はログを見てみましょう..私はデバイスに物理的なアクセスは問題だが、ユーザーがいないアプリケーション継続的にパスワードを入力したいと思うなら、少なくともクリアテキストではないと思う。 – Mike

+1

データを暗号化するランダムな塩を生成することができます。初めてユーザーがアプリを実行するときに 'java.util.UUDI.randomUUID()。toString()'が実行されます。より安全にするためには、[ロックパターン](https://code.google.com/p/android-lockpattern/)を、簡単に:-)使用することができます。ユーザーがデータを消去できないようにするにはこのフラグを 'application'(AndroidManifest.xml)の中で使ってください:' android:manageSpaceActivity = "あなたの偽の活動"。 –

+0

@haibison塩は、ユーザーが(少なくとも電話が根っこになっていれば)アクセスできるので、何も変わらない!しかし、これは "どのように私はセキュリティを実装することができますか"という質問ではありません。 –

-1

私はpswdをマスクしているので、設定を表示する際に暗号化された値は表示されません。私は唯一の暗号化が格納されてほしい

関連する問題