安全卫士5--MD5加密

来源:互联网 发布:幸福蓝海网络学 编辑:程序博客网 时间:2024/06/06 01:14
我们使用SharePerferences来保存密码
但是这样如果别人通过别的途径进入了Shareperferences文件就可以获取我们的,这是非常不安全的
所以这里使用MD5加密我们的密码

OK,首先我们使用这个工具类,当然里面的代码不用背,只要知道MD5的存在知道怎么用就可以了

package skkk.admin.com.newgoal.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
* Created by admin on 2016/5/14.
*/
public class MD5Utils {
    /*
    * MD5加密
    * */
    public static String encode(String password){
        try {
            MessageDigest instance=MessageDigest.getInstance("MD5");//获取MD5加密算法
            byte[] digest=instance.digest(password.getBytes());//对字符串加密,返回字节数组

            StringBuffer sb=new StringBuffer();
            for (byte b:digest){
                int i=b & 0xff;//获取字节的第八位有效值
                String hexString=Integer.toHexString(i);//将证书转为16进制

                if(hexString.length()<2){
                    hexString="0"+hexString;//如果是1位的话,补0;
                }
                sb.append(hexString);
            }
            System.out.println("md5: "+sb.toString());
            System.out.println("md5 length:"+sb.toString().length());

            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
}
可以发现这个工具类中有一个方法 encode() 使用就可以返回加密以后的密码
我们使用到homeActivity中

/*
* 设置密码的弹窗
* */
private void showPasswordSetDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    final AlertDialog dialog = builder.create();
    View view = View.inflate(this, R.layout.dialog_set_password, null);
    //dialog.setView(view); //强自定义的布局文件设置给dialog
    dialog.setView(view, 0, 0, 0, 0);//设置边距为0,保证在低版本上运行没有问题
    Button btnOK = (Button) view.findViewById(R.id.btn_OK);
    Button btnCancel = (Button) view.findViewById(R.id.btn_cancel);
    final EditText etPassword = (EditText) view.findViewById(R.id.et_password);
    final EditText etPasswordConfirm = (EditText) view.findViewById(R.id.et_password_confirm);
    btnOK.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //当用户点击确定
            String password = etPassword.getText().toString();
            String passwordConfirm = etPasswordConfirm.getText().toString();
            if (!TextUtils.isEmpty(password) && !passwordConfirm.isEmpty()) {
                //判断是否为空串
                if (password.equals(passwordConfirm)) {
                    Toast.makeText(HomeActivity.this, "登陆成功!", Toast.LENGTH_SHORT).show();
                    mPref.edit().putString("password", MD5Utils.encode(password)).commit();
                    dialog.dismiss();

                    //跳转到手机防盗页
                    startActivity(new Intent(HomeActivity.this, LostFind.class));
                } else {
                    Toast.makeText(HomeActivity.this, "两次密码不一致!", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(HomeActivity.this, "请输入密码!", Toast.LENGTH_SHORT).show();
            }
        }
    });
    btnCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();//隐藏dialog
        }
    });
    dialog.show();
}

我们把密码直接加密之后保存在SharePerferences中
然后读取的时候也是将输入的密码经过加密后与文件中保存的密码进行对比
如下

/*
* 输入密码的弹窗*/
private void showPasswordInputDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    final AlertDialog dialog = builder.create();
    View view = View.inflate(this, R.layout.dialog_input_password, null);
    //dialog.setView(view); //强自定义的布局文件设置给dialog
    dialog.setView(view, 0, 0, 0, 0);//设置边距为0,保证在低版本上运行没有问题
    Button btnOK = (Button) view.findViewById(R.id.btn_OK);
    Button btnCancel = (Button) view.findViewById(R.id.btn_cancel);
    final EditText etPassword = (EditText) view.findViewById(R.id.et_password);
    btnOK.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String password = etPassword.getText().toString();
            if (!TextUtils.isEmpty(password)) {
                String savedPassword = mPref.getString("password", null);
                if (MD5Utils.encode(password).equals(savedPassword)) {
                    Toast.makeText(HomeActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                    dialog.dismiss();
                    //跳转到手机防盗页
                    startActivity(new Intent(HomeActivity.this, LostFind.class));
                } else {
                    Toast.makeText(HomeActivity.this, "密码错误", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(HomeActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
            }
        }
    });
    btnCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();//隐藏dialog
        }
    });
    dialog.show();
}
很简单对不对  解决了密码保存的安全问题
当然过于简单的密码 是可以在网上用MD5暴力破解的
0 0
原创粉丝点击