2011-05-02 3 views
8

ローカルアンドロイドデータベースに保存する前にパスワードを暗号化する必要があります。暗号化なしですべて正常に動作しますが、私にはpreferences.xmlなどがあります。の後に、どのように機能を呼び出すことができますか?(たとえば、パスワード)の値を変更しますか?ここに私のコードです:Androidに保存する前に環境設定の値を処理しますか?

public class Preferences extends PreferenceActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.preferences); 

      // Get the custom preference 
      Preference customPref = (Preference) findPreference("pass"); 

      customPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){ 
       @Override 
       public boolean onPreferenceChange(Preference preference, Object newValue) { 
       String crypto = SimpleCrypto.encrypt("MYSECRETKEY", newValue.toString()); // encrypt 
       // Here is where I'm wrong, I guess. 
       SharedPreferences settings = getSharedPreferences("preferences", MODE_PRIVATE); 
       SharedPreferences.Editor editor = settings.edit(); 
       editor.putString("pass", crypto); 
       editor.commit(); 
      }); 
    } 
} 

P.S:このように、パスワードを変更すると、暗号化されずにパスワードが保存されます。

答えて

16

私はそこにパスワードを解読/ベースEditTextPreferenceを延長し、暗号化することによってこれをしなかった:

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(); 
    return SecurityUtils.decrypt(value); 
    } 

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

    @Override 
    public void setText(String text) { 
    if (Utils.isStringBlank(text)) { 
     super.setText(null); 
     return; 
    } 
    super.setText(SecurityUtils.encrypt(text)); 
    } 
} 

あり、私の個人的なユーティリティのいくつかの呼び出しがありますが、私はコードはあなたが何をする必要があるかでかなり明確だと思います。

+0

アイデアをお寄せいただきありがとうございます。自分のエクステンダクラスを作成しましたが、これを自分の環境設定画面にどのように実装しますか? XMLファイルのエントリを使用していますか?私はこの方法を試みたが成功しなかった。 – EvanBlack

+3

完全修飾名でなければなりません。 dmon

+0

ありがとうございます、それは魔法のように動作します。 :) – EvanBlack

関連する問題