首页 > 解决方案 > 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");
    }

}

标签: javaandroidvariablesloginsharedpreferences

解决方案


好的,我想通了。这是空格的问题。我在密码字符串中添加了 trim() 方法,现在它可以正常工作了!


推荐阅读