为我的Android应用程序创建密码验证

时间:2012-06-22 14:48:00

标签: android passwords textfield sd-card

  

可能重复:
  Password protecting my android app (the simple way)

编辑:

我在这里创立了我想要的东西:Password protecting my android app (the simple way)

(我有一个名为password的TextField。如果用户输入正确的密码123,点击按钮后我希望用户转到另一个活动。如果输入了错误的密码,应显示"Wrong password!"之类的消息。实际密码本身位于/sdcard/Android/password.txt的文件中。

如何创建此类功能?)

2 个答案:

答案 0 :(得分:0)

也许您应该首先阅读一些关于Android的内容并制作初学者教程:

这将向您展示如何获取字段并访问内容: http://developer.android.com/training/basics/firstapp/building-ui.html

这个应该给你一些关于改变活动的知识: http://developer.android.com/training/basics/firstapp/starting-activity.html

答案 1 :(得分:0)

你需要在UI,安全等方面涵盖很多方面,所以我将简要介绍一下你需要完成的步骤。

您需要为UI创建活动或dialogs,获取初始密码并检查密码都应该

使用密码属性集的TextView(隐藏字符)

允许用户取消或选择附加点击监听器确定的按钮

要存储/获取密码,请使用与此类似的内容而不是sdcard和txt文件Getting a password from shared preferences,您也可以使用共享首选项编辑器来存储它。这增加了一点安全性,但不是很多

一般来说,你应该存储的不是密码本身,但你应该真正存储一个令牌以增加安全性,这里有一个类可以为你做这个

import java.security.MessageDigest;

public class PasswordToken {

    static public String makeDigest(String password) 
    {
         String hexStr = "";

        try {
            MessageDigest md = MessageDigest.getInstance("SHA1");
            md.reset();
            byte[] buffer = password.getBytes();
            md.update(buffer);
            byte[] digest = md.digest();


            for (int i = 0; i < digest.length; i++) {
                hexStr +=  Integer.toString( ( digest[i] & 0xff ) + 0x100, 16).substring( 1 );

        } 
        } catch(Exception e) // If the algo is not working for some reason on this device
                             // we have to use the strings hash code, which 
                             // could allow duplicates but at least allows tokens
        {
            hexStr = Integer.toHexString(password.hashCode()); 
        }

        return hexStr;
    }

    static public boolean validate(String password, String token) 
    {
         String digestToken = "";
         String simpleToken = "";

         digestToken = makeDigest(password);

         if (0 == digestToken.compareTo(token)) 
             return true; 

         if (0 == simpleToken.compareTo(token))
             return true;

         return false; 
    }
}

所以在点击确定按钮时存储密码

 PasswordTextView.getText();
  String token = PasswordToken.makeDigest(password);
  //... store TOKEN using the shared preferences editor 

在用户想要登录时检查密码

PasswordTextView.GetText();
  String token = PasswordToken.makeDigest(password);
  //... GET token using the shared preferences 

  if (PasswordToken.validate(token))
     Start your new activity
  else
     tell your user to try again 

您可以使用startActivity or startActivityForResult启动另一个活动,并查看覆盖Dialog类以执行UI位。