Android开发网

首页|Android开发环境|Android开发教程|Android开发视频|Android游戏开发|Android开发实例|Android开发书籍|鸡啄米博客

Android手机卫士(二十二):md5加密过程

  在之前的文章中,我们将用户的密码使用SharedPreferences存储,我们打开/data/data/com.wuyudong.mobilesafe/shared_prefs文件夹下的 config.xml 文件,导入到本地,查看内容:

XML/HTML代码
  1. <?xml version='1.0' encoding='utf-8' standalone='yes' ?>  
  2. <map>  
  3.     <string name="mobile_safe_psd">123</string>  
  4.     <boolean name="open_update" value="false" />  
  5. </map>  

  密码居然使用的是明文,这样是非常不安全的。这里采用md5加密

  编写Md5Util工具类,代码如下:

Java代码
  1. package com.wuyudong.mobilesafe.Utils;  
  2.   
  3. /** 
  4.  * Created by wuyudong on 2016/10/9. 
  5.  */  
  6.   
  7. import java.security.MessageDigest;  
  8. import java.security.NoSuchAlgorithmException;  
  9.   
  10. public class Md5Util {  
  11.     /** 
  12.      * 给指定字符串按照md5算法去加密 
  13.      * 
  14.      * @param psd 需要加密的密码    加盐处理 
  15.      * @return md5后的字符串 
  16.      */  
  17.     public static String encoder(String psd) {  
  18.         try {  
  19.             //加盐处理  
  20.             psd = psd + "mobilesafe";  
  21.             //1,指定加密算法类型  
  22.             MessageDigest digest = MessageDigest.getInstance("MD5");  
  23.             //2,将需要加密的字符串中转换成byte类型的数组,然后进行随机哈希过程  
  24.             byte[] bs = digest.digest(psd.getBytes());  
  25.        //3,循环遍历bs,然后让其生成32位字符串,固定写法  
  26.             //4,拼接字符串过程  
  27.             StringBuffer stringBuffer = new StringBuffer();  
  28.             for (byte b : bs) {  
  29.                 int i = b & 0xff;  
  30.                 //int类型的i需要转换成16机制字符  
  31.                 String hexString = Integer.toHexString(i);  
  32.                 if (hexString.length() < 2) {  
  33.                     hexString = "0" + hexString;  
  34.                 }  
  35.                 stringBuffer.append(hexString);  
  36.             }  
  37.             //5,打印测试  
  38.             System.out.println(stringBuffer.toString());  
  39.             return stringBuffer.toString();  
  40.         } catch (NoSuchAlgorithmException e) {  
  41.             e.printStackTrace();  
  42.         }  
  43.         return "";  
  44.     }  
  45. }  

  md5加密:将字符串转换成 32位的字符串(16进制字符(0~f)) 不可逆

  例如:123加密后:202cb962ac59075b964b07152d234b70

  接下来直接调用加密类即可,分别在“设置密码”和“确认密码”两个对话框进行加密比对,具体代码如下:

Java代码
  1. /** 
  2.  * 确认密码对话框 
  3.  */  
  4. private void showConfirmPsdDialog() {  
  5.     //需要自己去定义对话框的显示样式,所以要调用dialog.setView(view);  
  6.     Builder builder = new Builder(this);  
  7.     final AlertDialog dialog = builder.create();  
  8.     final View view = inflate(this, R.layout.dialog_confirm_psd, null);  
  9.     //让对话框显示一个自己定义的对话框界面效果  
  10.     dialog.setView(view);  
  11.     dialog.show();  
  12.   
  13.     Button bt_submit = (Button) view.findViewById(R.id.bt_submit);  
  14.     Button bt_cancel = (Button) view.findViewById(R.id.bt_cancel);  
  15.   
  16.     bt_submit.setOnClickListener(new OnClickListener() {  
  17.         @Override  
  18.         public void onClick(View v) {  
  19.             EditText et_confirm_psd = (EditText) view.findViewById(R.id.et_confirm_psd);  
  20.             String confirmPsd = et_confirm_psd.getText().toString();  
  21.   
  22.             if (!TextUtils.isEmpty(confirmPsd)) {  
  23.                 //将存储在sp中32位的密码,获取出来,然后将输入的密码同样进行md5,然后与sp中存储密码比对  
  24.                 String psd = SpUtil.getString(getApplicationContext(), ConstantValue.MOBILE_SAFE_PSD, "");  
  25.   
  26.                 if (psd.equals(Md5Util.encoder(confirmPsd))) {  
  27.                     //进入用户手机防盗模块,开启一个新的activity  
  28.                     Intent intent = new Intent(getApplicationContext(), testActivity.class);  
  29.                     startActivity(intent);  
  30.                     //跳转到新的界面以后需要去隐藏对话框  
  31.                     dialog.dismiss();  
  32.                 } else {  
  33.                     ToastUtil.show(getApplicationContext(), "输入密码错误");  
  34.                 }  
  35.   
  36.             } else {  
  37.                 //提示用户密码输入为空的情况  
  38.                 ToastUtil.show(getApplicationContext(), "请输入密码");  
  39.             }  
  40.         }  
  41.     });  
  42.     bt_cancel.setOnClickListener(new OnClickListener() {  
  43.         @Override  
  44.         public void onClick(View view) {  
  45.             dialog.dismiss();  
  46.         }  
  47.     });  
  48. }  
  49.   
  50. /** 
  51.  * 设置密码对话框 
  52.  */  
  53. private void showSetPsdDialog() {  
  54.     //需要自己去定义对话框的显示样式,所以要调用dialog.setView(view);  
  55.     Builder builder = new Builder(this);  
  56.     final AlertDialog dialog = builder.create();  
  57.     final View view = inflate(this, R.layout.dialog_set_psd, null);  
  58.     //让对话框显示一个自己定义的对话框界面效果  
  59.     dialog.setView(view);  
  60.     dialog.show();  
  61.   
  62.     Button bt_submit = (Button) view.findViewById(R.id.bt_submit);  
  63.     Button bt_cancel = (Button) view.findViewById(R.id.bt_cancel);  
  64.   
  65.     bt_submit.setOnClickListener(new OnClickListener() {  
  66.         @Override  
  67.         public void onClick(View v) {  
  68.             EditText et_set_psd = (EditText) view.findViewById(R.id.et_set_psd);  
  69.             EditText et_confirm_psd = (EditText) view.findViewById(R.id.et_confirm_psd);  
  70.             String psd = et_set_psd.getText().toString();  
  71.             String confirmPsd = et_confirm_psd.getText().toString();  
  72.             if (!TextUtils.isEmpty(psd) && !TextUtils.isEmpty(confirmPsd)) {  
  73.                 //进入用户手机防盗模块  
  74.                 if (psd.equals(confirmPsd)) {  
  75.                     Intent intent = new Intent(getApplicationContext(), testActivity.class);  
  76.                     startActivity(intent);  
  77.                     //跳转到新的界面以后需要去隐藏对话框  
  78.                     dialog.dismiss();  
  79.                     SpUtil.putString(getApplicationContext(), ConstantValue.MOBILE_SAFE_PSD, Md5Util.encoder(psd));  
  80.   
  81.                 } else {  
  82.                     ToastUtil.show(getApplicationContext(), "密码不一致");  
  83.                 }  
  84.   
  85.             } else {  
  86.                 //提示用户密码输入为空的情况  
  87.                 ToastUtil.show(getApplicationContext(), "请输入密码");  
  88.             }  
  89.         }  
  90.     });  
  91.     bt_cancel.setOnClickListener(new OnClickListener() {  
  92.         @Override  
  93.         public void onClick(View view) {  
  94.             dialog.dismiss();  
  95.         }  
  96.     });  
  97. }

Tags:Preferences | 2017/10/24 | 发表评论

相关文章: