2

私はAndroidの初心者で、アプリを作成していて、アプリの安全性に焦点を当てたいと思っています.このリンクを見つけました.使用する。" その後、「機密情報を保持するためにJavaのStringクラスを使用しないでください。代わりに、char配列またはバイト配列を使用してください。これは、Stringが不変であるためです」と述べています。

私のアプリには、次のようなコードがあります (このコードは、ユーザーが入力した PIN をチェックし、内部ストレージ内の別の PIN と比較するだけです):

public class Class extends Activity implements OnClickListener{
    private static final String fileName = "FilePin";
    private Button button;
    private EditText editText = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_example); 
        editText = (editText) findViewById(R.id.editText); 
        button = (Button) findViewById(R.id.button);  
        button.setOnClickListener(this);
    }   

    @Override
    public void onClick(View v){
        if (readPin()) {
            textView.setText(new char[]{' '}, 0, 0);
            Intent intent = new Intent(this, OtherClass.class);  
            startActivity(intent);
        }
    }

//   this method read the file where the PIN the user create is save in the internal storage
    public boolean readPin(){
        StringBuilder stringBuilder = null;
        StringBuilder inputString;
        try {
            BufferedReader inputReader = new BufferedReader(new InputStreamReader
                    (openFileInput(fileName)));
            stringBuilder = new StringBuilder();
            while ((inputString = new StringBuilder(inputReader.readLine())) != null) {
                stringBuilder.append(inputString);
            }
            inputReader.close();
        } catch (Exception e) {
            e.printStackTrace();
            }
        inputString = new StringBuilder("");
        assert stringBuilder != null;
        boolean comparePin = compare(stringBuilder);
        stringBuilder = new StringBuilder("");
        return comparePin;
    }

//  this method compare the PIN saved with the PIN the users enters
    private boolean compare(StringBuilder pinSaved){
        if (!editText.getText().toString().equals(pinSaved.toString())) {
            Toast.makeText(getBaseContext(), "the PIN it´s incorrect"
                    , Toast.LENGTH_SHORT).show();
            pinSaved = new StringBuilder("");
            return false;
        }
        else {
            pinSaved = new StringBuilder("");
            return true;
        }
    }
}

プレビューリンクで読んだことについては、代わりに String を使用しませんでした。StringBuilder は可変であるため、StringBuilder を使用します。使用後、値を「stringBuilder = new StringBuilder("");」に変更します。 [] editText を char[] 変数に保存する方法や、ファイルに保存された PIN を char[] 変数に保存する方法がわからず、char[] を使用する方法の例が見つからなかったためです。それらのケース。

私の質問は次のとおりです: このケースは Android アプリに対して安全ですか、それとも char[] 変数に変更する方が良いですか?, StringBuffer クラスは Android に対して安全ではありませんか? editText 値を char[] に保存するにはどうすればよいですか? ファイルを char[] 変数に保存するにはどうすればよいですか?

4

1 に答える 1