Android 中的密码比较

Password comparing in Android

所以我在共享首选项中将密码存储为散列,当用户输入密码时,我需要对其进行散列并与存储的进行比较。

是否应该在 AsyncTask 或 Thread 中完成,因为计算和比较可能会冻结 UI?然后您知道从异步任务或线程接收结果(真、假)的简洁方法吗?

public void startGenerateCode(View view) {
    String pinCompare = pin; //pin is class variable obtained from editText
    pinCompare = tools.bin2hex(tools.getHash(pinCompare)); 

    if(pinCompare.compareTo(session.getDetails("Pin"))==0){
        generateCode();
    }
    else
        Toast.makeText(this, "Wrong PIN", Toast.LENGTH_SHORT).show();

}

public void generateCode(){
    Intent i = new Intent(this, GeneratedCode.class);
    startActivity(i);
    overridePendingTransition(R.anim.right_slide_in, R.anim.right_slide_out);
    finish();
}

这是在 activity 按下按钮后完成的。

佐罗,

我猜这个过程是在有人按Button时触发的,例如登录。我认为您不需要任何额外的 Thread 来处理 Hash 微积分。

如果您随后必须连接到服务器和 send/receive 数据,那么由于异步流,您应该使用它。

对主要评论的回应post: 是的,您可以在 onPostExecute.

中开始一个 Activity

代码示例:

public void startGenerateCode(View view) {

    // Disable button         
    Button button = (Butto) view;
    button.setEnabled(false);

    String pinCompare = pin; //pin is class variable obtained from editText
    pinCompare = tools.bin2hex(tools.getHash(pinCompare)); 

    if(pinCompare.compareTo(session.getDetails("Pin"))==0){
        generateCode();
    } else {
        // If the login fails, re-enable the button to try again
        button.setEnabled(true);
        Toast.makeText(this, "Wrong PIN", Toast.LENGTH_SHORT).show();
    }
}

我是背诵的,所以可能会有错误。