2016-11-20 27 views
2

在我的應用程序中,我有一個用戶輸入密碼的片段。這個片段能夠旋轉。在旋轉時,我希望使用onSaveInstanceStateonActivityCreated來保存和恢復大部分文本字段。通常,當我將密碼保存到磁盤時,我使用單向散列來限制如果此信息受到危害時可以完成的損害數量。但是,如果密碼只寫了一半,那麼我不能做單向散列......它需要可恢復。如何處理屏幕上的密碼輸入

所以我的問題是:在Bundle安全的密碼?或者,如果片段被破壞,我應該簡單地銷燬這個值嗎?以下代碼對我的用戶是否有安全風險?

public override void OnSaveInstanceState(Bundle savedInstanceState) 
{ 
    base.OnSaveInstanceState(savedInstanceState); 
    savedInstanceState.PutString("passEditText", _passEditText.Text); 
    ... 
} 

public override void OnActivityCreated(Bundle savedInstanceState) 
{ 
    base.OnActivityCreated(savedInstanceState); 
    if (savedInstanceState != null) 
    { 
     _passEditText.Text = savedInstanceState.GetString("passEditText", ""); 
     ... 
    } 
} 
+0

我想去一個savedInstanceState。它將僅存儲在內存中,同樣適用於密碼字段。 – rastik

+1

片段有一個'SaveFragmentInstanceState' ...儘可能安全?它與內存中的任何對象(包括用於部分/完整密碼的「EditText」)的**安全(或不安全)相同。不要將軟件包內容序列化到磁盤或使用'PersistableBundle'來放置安全信息.... – SushiHangover

+0

@SushiHangover好的,完美的!加上這個答案,我會給你複選標記! – flakes

回答

1

Fragments具有SaveFragmentInstanceState方法。

保存給定片段的當前實例狀態。這可以在稍後創建Fragment的新實例並將其添加到片段管理器時使用,以使其創建自己以匹配此處返回的當前狀態。

編號:Xamarin:SaveFragmentInstanceState 編號:安卓:saveFragmentInstanceState

安全?

這是因爲安全的,或不安全,如在存儲器中的任何對象,包括在其內具有部分/完整密碼EditText。不要將軟件包內容序列化到磁盤上,或將其與PersistableBundle保存在一起,以保存它的安全信息...