我是 Android 新手,我正在制作一个应用程序,我想专注于应用程序的安全性,我找到了这个链接,上面写着“通过将敏感信息设置为 null利用。” 后来它说“避免使用Java的String类来保存敏感信息。而是使用char数组或字节数组。这样做的原因是因为字符串是不可变的”
在我的应用程序中,我有一个与此类似的代码(此代码仅检查用户输入的 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("");”,我没有使用 char [] 因为我不知道如何将 editText 保存到 char[] 变量或如何将文件中保存的 PIN 保存在 char[] 变量中,而且我没有找到有关如何使用 char[] 的示例那些案例。
我的问题是:这种情况对于 android 应用程序是安全的,还是更改为 char[] 变量更好?, StringBuffer 类对于 Android 是否不安全?如何将 editText 值保存在 char[] 中?如何将文件保存在 char[] 变量中?