【问题标题】:Password protecting my android app (the simple way)密码保护我的 android 应用程序(简单的方法)
【发布时间】:2012-03-10 03:42:43
【问题描述】:

我已经构建了我的第一个应用程序,我想用密码保护它。将密码存储在 Java 文件中对我来说很好,并且该方法需要尽可能简单,因为在此应用程序之前我没有 java 甚至 xml 的经验。我已经尝试了几次但失败了,所以我希望有人可以帮助我。

我已经创建了带有 EditText 字段的布局:

<EditText
 android:id="@+id/passwordedittext"
 android:layout_width="200dp"
 android:layout_height="50dp"
 android:inputType="textPassword"
 android:layout_marginTop="40dp"
 android:layout_marginLeft="20dp">
 <requestFocus />

还有一个提交按钮:

<Button
 android:id="@+id/submitbutton"
 android:layout_width="50dp"
 android:layout_height="50dp"
 android:layout_marginTop="40dp"
 android:background="@drawable/bgo"
 android:clickable="true" 
 android:layout_gravity="right|center_horizontal" 
 android:layout_marginRight="20dp"/>

Java 文件:

package com.berry;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;


public class password extends Activity{

MediaPlayer mpbuttonclick;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

    setContentView(R.layout.password);

    mpbuttonclick = MediaPlayer.create(this, R.raw.keypress);

    Button sumbitButton = (Button) findViewById(R.id.submitbutton);
    sumbitButton.setOnClickListener(new View.OnClickListener() {        
        public void onClick(View v){
        EditText passwordEditText = (EditText) findViewById(R.id.passwordedittext);
                    if(passwordEditText.getText().toString()=="MyPasswordHere"){
                        startActivity(new Intent("com.berry.intro"));
                        mpbuttonclick.start();


                    }}});
    }}

【问题讨论】:

    标签: java android passwords password-protection


    【解决方案1】:

    这部分:

    if(passwordEditText.getText().toString()=="MyPasswordHere")
    

    不正确。应该是

    if(passwordEditText.getText().toString().equals("MyPasswordHere"))
    

    在比较原始数据类型(如intcharboolean)时,您可以使用==!= 等。
    在比较对象时(如StringCar 等),您需要使用.equals() 方法。

    See also this page.

    【讨论】:

      【解决方案2】:

      这样检查你的密码是不安全的。

      有几种方法可以轻松绕过您的代码

      1. 直接从另一个 App 调用 Activity

      2. 读取反汇编的smali code找回密码

      3. 使用smali修改代码始终跳转到代码块

      可用于解决这些问题的解决方案:

      1. 模糊您的代码(最糟糕的选择,但在大多数情况下可能就足够了)

      2. 比较Hashed Password:更安全。但应该是一个salted Hash。 (There is also a more simple to understand explaination for the implementation)

      3. Use a HTTP Request 到您的服务器以隐藏密码检查背后的机制。 (但这需要您的应用请求网络权限)

      【讨论】:

      • 嗯,由于提问者在 java 中很弱,我推荐解决方案二,可以这样实现:'SHA1.Sha1Hash(passwordGoesHere);'
      • 感谢您的提示,我添加了一个链接来解决这个问题。
      • 感谢您的建议,当我构建更实质性的东西时,我会研究您的解决方案。
      【解决方案3】:

      在编辑文本字段xml中可以添加

         android:password="true"
      

      【讨论】:

      • 使用此标志将通过使编辑文本具有密码点而不是显示实际字符来改进您的应用程序,但此标志不会解决您遇到的问题。
      • 编辑文本框无论如何都会显示点,因为输入类型已在 xml 中定义为 textpassword。谢谢。
      猜你喜欢
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多