java - Android 应用登录屏幕 - 错误的变量和共享偏好比较
问题描述
我正在尝试将加密密码存储在我的应用程序的 SharedPreferences 中。根据日志,密码正确保存并与加密后输入的密码匹配,但在 if 比较中它们不相等。每次它运行 else 指令。我找不到问题所在,所以我寻求帮助!顺便说一句,有什么更好、更安全的密码存储方式,甚至加密方式?
public class LoginActivity extends AppCompatActivity {
private static final String PREFERENCES_NAME = "passHashed";
private static final String PREFERENCES_TEXT_FIELD = "textField";
public EditText Password;
public TextView Info;
private String passSavedHash;
private SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Password = (EditText) findViewById(R.id.etPassword);
Info = (TextView) findViewById(R.id.Info);
Button loginBtn = findViewById(R.id.loginButton);
preferences = getSharedPreferences(PREFERENCES_NAME, AppCompatActivity.MODE_PRIVATE);
if(!passRead().equals("0")) {
passSavedHash = passRead();
Log.d("Password", "passHashed: " + passSavedHash);
}
else{
loginBtn.setText(R.string.set_pass);
}
}
public void onClickValidate(View view) throws Exception {
String password = Password.getText().toString();
String passHash = CipherAlgorithm.encrypt(password);
Log.d("Password", "passHashed: " + passSavedHash);
Log.d("Password", "passSavedHash: " + passHash);
if(passRead().equals("0") && password.length() > 3) {
passSave();
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
else {
if (Objects.equals(passSavedHash, passHash)) {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
} else {
Info.setText(R.string.wron_pass);
}
}
Password.setText("");
}
private void passSave() throws Exception {
SharedPreferences.Editor preferencesEditor = preferences.edit();
String editTextData = CipherAlgorithm.encrypt(Password.getText().toString());
preferencesEditor.putString(PREFERENCES_TEXT_FIELD, editTextData);
preferencesEditor.commit();
}
private String passRead() {
return preferences.getString(PREFERENCES_TEXT_FIELD, "0");
}
}
解决方案
好的,我想通了。这是空格的问题。我在密码字符串中添加了 trim() 方法,现在它可以正常工作了!
推荐阅读
- laravel - Dropzone 中的多个名称属性
- git - Git 流程分支离开阶段
- python-3.x - 如何使用 DateTimeStamp 在 For 循环中迭代多个组合
- networking - 为什么我安装的 Wireshark 无法分析 RTP 协议?
- html - 图像未显示在按钮内的跨度上
- octave - 八度缓冲控制台输出
- django - 如何为 django_social_share 制作自定义模板?
- python - Python re 正则表达式子字母不被引号包围,如果它们匹配特定单词,包括正则表达式组/匹配,则不
- c# - 如何使用 NeverExtractable 密钥在 hsm 中使用 c# cng 加密数据?
- javascript - 从动态 CRM 中的对话框窗口运行 JavaScript