【问题标题】:Creating password verification for my Android application [duplicate]为我的 Android 应用程序创建密码验证 [重复]
【发布时间】:2012-06-24 21:25:05
【问题描述】:

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

编辑:

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

(我有一个名为password 的TextField。如果用户输入正确的密码123,单击按钮后我希望用户转到另一个活动。如果输入错误的密码,则会显示@ 等消息应显示 987654325@。实际密码本身可在位于 /sdcard/Android/password.txt 的文件中找到。

我怎样才能创建这样的功能?)

【问题讨论】:

    标签: android passwords textfield sd-card


    【解决方案1】:

    也许你应该先阅读一点关于 Android 的知识并制作初学者教程:

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

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

    【讨论】:

    • 是的!我找到了我需要的东西!
    【解决方案2】:

    您需要在 UI、安全等方面涵盖很多内容,因此我将简要概述您需要完成的步骤。

    您需要活动或dialogs 的 UI,获取初始密码和检查密码都应该有

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

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

    要存储/获取密码,然后使用与此类似的东西而不是 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 启动另一个活动并查看覆盖对话框类以执行 UI 位。

    【讨论】:

    • 是的!我找到了我需要的东西!
    猜你喜欢
    • 2011-01-22
    • 2015-09-06
    • 2014-03-15
    • 1970-01-01
    • 2021-12-15
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多