您的位置:首页 > 其它

安全卫士5--MD5加密

2016-05-15 22:50 393 查看
我们使用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暴力破解的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: