【问题标题】:Android App storing and calling Username and PasswordsAndroid 应用程序存储和调用用户名和密码
【发布时间】:2016-05-04 22:40:34
【问题描述】:

我有一个要创建登录活动的应用程序。我有 1)登录(按钮) 2)用户ID(编辑文本) 3) 密码(EditText)

我想将用户名和密码存储在设备的内部存储器中。如何创建 SharedPreferences 从中提取的文件并对其进行加密?

login_Button.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {

            SharedPreferences userDetails = getSharedPreferences("userdetails", MODE_PRIVATE);
            SharedPreferences.Editor edit = userDetails.edit();
            edit.clear();

            if(etUserID.getText().toString().equals("")){
                Toast.makeText(getApplicationContext(),"Please enter a User ID", Toast.LENGTH_LONG).show();
            }else if (etPassword.getText().toString().equals("")){
                Toast.makeText(getApplicationContext(),"Please enter a password", Toast.LENGTH_LONG).show();
            }else{
                edit.putString("userID", txtUID.getText().toString().trim());
                edit.putString("password", txtPass.getText().toString().trim());
                edit.commit();
            }



        }
    });

txtUID 和 txtPass 显示为红色,当我删除它时,系统说 getText 错误。

这是我第一次尝试验证器。我从 android 开发页面找到了一个名为 PasswordAuthentication 的东西,但我找不到任何正在使用的教程或代码。

SharedPreferences userDetails = getSharedPreferences("userdetails", MODE_PRIVATE);
    String UID = userDetails.getString("userID", "");
    String pass = userDetails.getString("password", "");

    if (userDetails.contains("userID")||userDetails.contains("password")){
        startActivity(new Intent(LogOn.this,CrimeMap.class));
    }

我用于研究的来源: http://developer.android.com/reference/java/net/PasswordAuthentication.html how to use getSharedPreferences in android

更新:

好的,这是我更新的代码。如果我不输入用户 ID 或密码,它会触发我的陈述。但是,当我输入正确的用户 ID 和密码时,程序不会进入下一个活动。我会先让它运行,然后我会继续加密它。

@覆盖 protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_log_on);

    etUserID = (EditText) findViewById(R.id.etUserID);
    etPassword = (EditText) findViewById(R.id.etPassword);
    login_Button = (Button) findViewById(R.id.bLogin);


    login_Button.setOnClickListener(new View.OnClickListener(){


        @Override
        public void onClick(View v) {

            int uid = 1155;
            String pass = "pass";

            SharedPreferences userDetails = getSharedPreferences(User_File, MODE_PRIVATE);
            SharedPreferences.Editor edit = userDetails.edit();

            edit.putInt("userID", uid);
            edit.putString("password", pass);
            edit.commit();


            if((etUserID.getText().toString().equals("")) || (etPassword.getText().toString().equals(""))) {
                Toast.makeText(getApplicationContext(),"Please enter a User ID", Toast.LENGTH_LONG).show();
            }else if (etPassword.getText().toString().equals("")){
                Toast.makeText(getApplicationContext(),"Please enter a password", Toast.LENGTH_LONG).show();
            }else{
                edit.putInt("userID", Integer.parseInt(etUserID.getText().toString()));
                edit.putString("password", etPassword.getText().toString());
            }



        }
    });

    SharedPreferences userDetails = getSharedPreferences(User_File, MODE_PRIVATE);

    if (userDetails.equals(etUserID) && (userDetails.equals(etPassword))){
        startActivity(new Intent(LogOn.this,CrimeMap.class));
    }

更新:

我终于明白了!谢谢你的帮助!这是我的这部分项目的完整代码。我还没有加密它,但我想我会休息一下,稍后再回来。感谢您的所有帮助!

     @Override
        public void onClick(View v) {

            int uid = 1155;
            String pass = "pass";

            SharedPreferences userDetails = getSharedPreferences(User_File, MODE_PRIVATE);
            SharedPreferences.Editor edit = userDetails.edit();

            edit.putInt("userID", uid);
            edit.putString("password", pass);
            edit.commit();


            if((etUserID.getText().toString().equals(""))){
                Toast.makeText(getApplicationContext(),"Please enter a User ID", Toast.LENGTH_LONG).show();
            }else if (etPassword.getText().toString().equals("")){
                Toast.makeText(getApplicationContext(),"Please enter a password", Toast.LENGTH_LONG).show();
            }else{
                String user_id = etUserID.getText().toString();
                int user_id2 = Integer.parseInt(user_id);
                String user_password = etPassword.getText().toString();

                int userID = userDetails.getInt("userID", 1);
                String password = userDetails.getString("password", "no name");

                if (userID == user_id2 && password.equals(user_password)){
                    startActivity(new Intent(LogOn.this,CrimeMap.class));
                }
            }

【问题讨论】:

    标签: java android


    【解决方案1】:

    不要尝试访问该文件。让 android 这样做,并将您存储的数据加密到共享首选项中。我的意思是:

      edit.putString("userID", encrypt(txtUID.getText().toString().trim()));
      edit.putString("password", encrypt(txtPass.getText().toString().trim()));
    

    您可以使用任何您喜欢的加密方式,当然您需要以这种方式对其进行解码。

    另一种选择是存储 SHA1 加密密码,并在身份验证中将输入的 SHA1 加密密码与存储的字符串进行比较。例如,您可以使用http://mvnrepository.com/artifact/commons-codec/commons-codec

    String sha1Password = DigestUtils.sha1Hex(password);
    edit.putString("sha1Password", encrypt(sha1Password);
    

    要解决“红色”问题,您需要声明 txtUID、txtPass。它们应该以某种方式添加到您的布局中。可能通过编辑布局xml。但即使以编程方式您也可以这样做,例如:Input text dialog Android

    【讨论】:

    • 您是否直接访问共享首选项以创建包含用户名和密码的文件?现在我正在查看“解析”和共享首选项。软件公司甚至使用“解析”吗?来源:parse.com
    • 1.不,您已经拥有的上述代码确实负责存储。 2.我不明白解析的问题。是的,它被使用了,他们对每个用例都有定价,但这与您最初的问题有什么关系?
    • sha1 不是加密算法。
    猜你喜欢
    • 1970-01-01
    • 2010-12-27
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2019-09-02
    • 2011-10-08
    相关资源
    最近更新 更多