软件编程
位置:首页>> 软件编程>> Android编程>> Android登录时密码保护功能

Android登录时密码保护功能

作者:kang_ya_ping  发布时间:2023-10-24 07:09:40 

标签:Android,登录,密码

在很多的Android项目中都需要用户登录、注册。这样的话在开发中做好保护用户密码的工作就显得尤为重要。这里我把自己的密码保护方法记录下来。

这是我建了一个保存密码的文件,以便于检查自己保存密码或者上传到服务器的时候密码是否已经被保护了。这就是当我输入用户名和密码之后点击记住密码之后

保存在SD卡上的文件,打开之后可以明显的看到密码已经被保护了。

Android登录时密码保护功能

下面是我的布局文件以及主程序的代码:


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E6E6E6"
 android:orientation="vertical">
 <ImageView
  android:id="@+id/iv_head"
  android:layout_width="150dp"
  android:layout_height="150dp"
  android:layout_centerHorizontal="true"
  android:layout_marginTop="40dp"
  android:src="@drawable/ic_launcher"/>
 <LinearLayout
  android:id="@+id/layout"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_below="@+id/iv_head"
  android:layout_margin="10dp"
  android:background="#FFFFFF"
  android:orientation="vertical">
  <RelativeLayout
   android:id="@+id/rl_username"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_margin="10dp">
   <TextView
    android:id="@+id/tv_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:text="账号"/>
   <EditText
    android:id="@+id/et_number"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_toRightOf="@+id/tv_name"
    android:background="@null"/>
  </RelativeLayout>
  <View
   android:layout_width="match_parent"
   android:layout_height="2dp"
   android:background="#E6E6E6"/>
  <RelativeLayout
   android:id="@+id/rl_userpsd"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_margin="10dp">
   <TextView
    android:id="@+id/tv_psw"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:text="密码"/>
   <EditText
    android:id="@+id/et_password"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_toRightOf="@+id/tv_psw"
    android:inputType="textPassword"
    android:background="@null"/>
  </RelativeLayout>

</LinearLayout>
 <Button
  android:id="@+id/login"
  android:onClick="login"
  android:layout_width="match_parent"
  android:layout_height="40dp"
  android:layout_below="@+id/layout"
  android:layout_centerHorizontal="true"
  android:layout_marginLeft="10dp"
  android:layout_marginRight="10dp"
  android:layout_marginTop="20dp"
  android:background="#3C8DC4"
  android:text="登录"
  android:textColor="#FFFFFF"/>
 <Button
  android:id="@+id/signUp"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="注册"
  android:background="#E6E6E6"
  android:textColor="#000000"
  android:layout_marginTop="21dp"
  android:layout_centerHorizontal="true"
  android:layout_marginRight="10dp"
  android:layout_below="@+id/login"
  android:layout_alignParentRight="true"/>

<CheckBox
  android:id="@+id/save"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignBaseline="@+id/signUp"
  android:layout_alignBottom="@+id/signUp"
  android:layout_alignLeft="@+id/login"
  android:layout_marginLeft="14dp"
  android:text="记住密码" />

</RelativeLayout>


package com.itcast.test03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
private EditText et_username;
private EditText et_userPsd;
private Button login;
private Button signUp;
private CheckBox save;
private String user,pass;
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);  
 setContentView(R.layout.activity_main);
 et_username = (EditText)findViewById(R.id.et_number);
 et_userPsd = (EditText)findViewById(R.id.et_password);
 login=(Button)findViewById(R.id.login);
 signUp=(Button)findViewById(R.id.signUp);
 save = (CheckBox)findViewById(R.id.save);
 save.setOnClickListener(new CheckBox.OnClickListener(){
  public void onClick(View v) {
   SharedPreferences pre = getSharedPreferences("loginvalue",
            MODE_WORLD_WRITEABLE);
   pass = MD5( et_userPsd.getText().toString());
   user = et_username.getText().toString();
   if (!pass.equals("") && !user.equals("")) {
      pre.edit().putString("username",
        et_username.getText().toString())
        .putString("password", encryptmd5(pass)).commit();
   Toast.makeText(getApplicationContext(),"保存成功!",
   Toast.LENGTH_SHORT).show();
   } else{
   Toast.makeText(getApplicationContext(),"密码不能为空!",
   Toast.LENGTH_LONG).show();
 }
   }
 });
 login.setOnClickListener(new Button.OnClickListener() {

@Override
  public void onClick(View v) {

SharedPreferences sp = getSharedPreferences("loginvalue",MODE_WORLD_READABLE);
  String loginuser = sp.getString("username",null);
  String loginpass = sp.getString("password",null);

user = et_username.getText().toString();
  pass = et_userPsd.getText().toString();

String passmd5 = MD5(pass);
  String encryptmd5 = encryptmd5(passmd5);

System.out.println("username="+ loginuser
  + "-------------password="+ loginpass);
  System.out.println("user=="+ user
  + "-------------encryptmd5=="+ encryptmd5);
  if (!user.equals("") && !pass.equals("")) {
  if (user.equals(loginuser) && encryptmd5.equals(loginpass)) {
  Intent intent = new Intent();
  intent.setClass(MainActivity.this, StudentMainActivity.class);
  MainActivity.this.startActivity(intent);
  finish();
  } else{
  Toast.makeText(getApplicationContext(),"密码是错误的!",
  Toast.LENGTH_LONG).show();
  }
  } else{
  Toast.makeText(getApplicationContext(),"密码不能为空!",
  Toast.LENGTH_LONG).show();
  }

}

});
 initWidget();//
 }
private void initWidget()
{

login.setOnClickListener(this);
 signUp.setOnClickListener(this);
 et_username.setOnFocusChangeListener(new OnFocusChangeListener()
 {

@Override
  public void onFocusChange(View v, boolean hasFocus) {
   // TODO Auto-generated method stub
   if(!hasFocus){
    String username=et_username.getText().toString().trim();
    if(username.length()<4){
     Toast.makeText(MainActivity.this, "用户名不能小于4个字符", Toast.LENGTH_SHORT);
    }
   }
  }

});
 et_userPsd.setOnFocusChangeListener(new OnFocusChangeListener()
 {

@Override
  public void onFocusChange(View v, boolean hasFocus) {
   // TODO Auto-generated method stub
   if(!hasFocus){
    String password=et_userPsd.getText().toString().trim();
    if(password.length()<4){
     Toast.makeText(MainActivity.this, "密码不能小于4个字符", Toast.LENGTH_SHORT);
    }
   }
  }

});
}

public void onClick(View v) {
 // TODO Auto-generated method stub
 switch(v.getId())
 {
 case R.id.login:
  if(checkEdit())
  {
   login();
  }  
  break;
 case R.id.signUp:
  Intent intent2=new Intent(MainActivity.this,SignUp.class);
  startActivity(intent2);
  break;
 }
}

private boolean checkEdit(){
 if(et_username.getText().toString().trim().equals("")){
  Toast.makeText(MainActivity.this, "用户名不能为空", Toast.LENGTH_SHORT).show();
  Intent intent=new Intent(MainActivity.this,StudentMainActivity.class);
  startActivity(intent);
 }else if(et_userPsd.getText().toString().trim().equals("")){
  Toast.makeText(MainActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show();
 }else{
  return true;
 }
 return false;
}

private void login(){
 //这个网址需要改动
 String httpUrl="http://192.168.1.102:8080/web-test/login.jsp";
 HttpPost httpRequest=new HttpPost(httpUrl);
 List<NameValuePair> params=new ArrayList<NameValuePair>();
 params.add(new BasicNameValuePair("username",et_username.getText().toString().trim()));
 params.add(new BasicNameValuePair("password",et_userPsd.getText().toString().trim()));
 HttpEntity httpentity = null;
 try {
  httpentity = new UrlEncodedFormEntity(params,"utf8");
 } catch (UnsupportedEncodingException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 httpRequest.setEntity(httpentity);
 HttpClient httpclient=new DefaultHttpClient();
 HttpResponse httpResponse = null;
 try {
  httpResponse = httpclient.execute(httpRequest);
 } catch (ClientProtocolException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 if(httpResponse.getStatusLine().getStatusCode()==200)
 {
  String strResult = null;
  try {
   strResult = EntityUtils.toString(httpResponse.getEntity());
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  Toast.makeText(MainActivity.this, strResult, Toast.LENGTH_SHORT).show();
  Intent intent=new Intent(MainActivity.this,StudentMainActivity.class);
  startActivity(intent);
 }
 else

{
  Toast.makeText(MainActivity.this, "登录失败!", Toast.LENGTH_SHORT).show();
 }

}
public static String MD5(String str){
 MessageDigest md5 = null;
try {
 md5 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 return "";
}
 char[] charArray = str.toCharArray();
 byte[] byteArray = new byte[charArray.length];
 for (int i = 0; i < charArray.length; i++) {
 byteArray[i] = (byte)charArray[i];
}
 byte[] md5Bytes = md5.digest(byteArray);
 StringBuffer hexValue = new StringBuffer();
 for (int i = 0; i < md5Bytes.length; i++) {
 int val = ((int)md5Bytes[i])&0xff;
 if(val<16){
  hexValue.append("0");
 }
 hexValue.append(Integer.toHexString(val));
}
 return hexValue.toString();  
}
public static String encryptmd5(String str){
 char[] a = str.toCharArray();
 for (int i = 0; i < a.length; i++) {
 a[i] = (char)(a[i]^'1');
}
 String s = new String(a);
 return s;
}
}

添加权限:


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

Android登录时密码保护功能Android登录时密码保护功能

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com