安全卫士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暴力破解的
但是这样如果别人通过别的途径进入了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暴力破解的
相关文章推荐
- 关于hasnextLine()方法的一些理解
- Java基础--数据库连接方式
- 基于IntelliJ IDEA 15.0.2的Tomcat7.0.69源码运行环境搭建
- 如何学习一种开发框架
- 问题相关
- 开发转测试
- uva1343
- 代码混淆之坑点
- 产品思维学习(五)--产品敏捷开发和项目管理
- 厉害了!中国农历算法
- 131.Sum Root to Leaf Numbers
- Task执行内幕与结果处理解密
- Java虚拟机详解----JVM常见问题总结
- UML——对象图和类图
- 大型网站技术架构核心原理与案例分析
- 《java入门第一季》集合框架引入与面试题
- 线程同步(6):linux 多线程pthread中的各种函数
- maven学习系列7----将依赖依赖文件打包到jar中
- 《java入门第一季》集合框架引入与面试题
- 设计模式-1依赖倒置原则示例