Android实例-手机安全卫士(十四)-为密码进行MD5加密

一、目标。

  将设置的密码通过MD5加密后再保存。

 

二、代码实现。

  1、在自定义工具包(com.example.mobilesafe.ui)中新增一个类(取名MD5Utils)。在新建类(MD5Utils)中新建一个返回值为String类型的public的静态方法(取名mD5Encryption),传入参数为String类型(password)。

  2、在新建的方法(md5Encryption)中:

    ①.通过消息摘要器对象(MessageDigest)的getInstance(String algorithm)方法获取一个消息摘要器的实例对象(取名digest),参数String algorithm表示要采用的运算法则的名字。由于该过程会产生一个“无此运算法则的错误”,因此采用try...catch...模块将其捕获。为整个方法捕获,后续代码都在try中。

    ②.在try代码块中通过MessageDigest对象的digest(byte[] input)方法完成哈希计算并返回字节数组类型(byte[])的值(取名newpassword),在参数(byte[] input))中需要将传入的String类型对象通过getBytes()方法转成字节数组类型。

    ③.新建一个StringBuffer对象(取名buffer)用于储存后续每个字节进行转化后的MD5的值。

    ④.将得到的字节数组对象(newpassword)中的每一个字节通过for循环取出。在for循环中将每个字节和一个“八个二进制位11111111(十六进制为0xff)”进行“与运算(&),从而得到一个int类型的返回值(取名i)。

    ⑤.for循环中,通过整数对象(Integer)的toHexString(int i)方法将③中返回的整数值(i)转成16进制的String类型的值(取名string)。

    ⑥.for循环中,判断每个字节的长度是否为1。如果为1,则需在其前面用”0“补齐,通过StringBuffer对象的append(String string)方法将“0”补充至StringBuffer对象中。如果不为1则直接将String类型的值(string)通过append(String string)方法放入StringBuffer对象(buffer)中

    ⑦.for循环中,判断完之后再将String类型的值(string)通过append(String string)方法放入StringBuffer对象(buffer)中。

    ⑧.在for循环完成后将StringBuffer对象(buffer)返回,如果有异常则返回空字符串。

新建的自定义工具类MD5Utils代码如下:

 1 public class MD5Utils {
 2     
 3     public static String md5Encryption(String password) {
 4         try {
 5             MessageDigest digest = MessageDigest.getInstance("md5");
 6             byte[] newpassword = digest.digest(password.getBytes());
 7             StringBuffer buffer = new StringBuffer();
 8             for(byte b :newpassword){
 9                 int i = b & 0xff;
10                 String string = Integer.toHexString(i);
11                 if(string.length() ==1){
12                     buffer.append("0");
13                 }
14                 buffer.append(string);
15             }
16             return buffer.toString();                        
17         } catch (NoSuchAlgorithmException e) {
18             e.printStackTrace();
19             return "";
20         }        
21     }
22 }
View Code 

  3、修改设置防盗密码和输入防盗密码对话框中的密码的保存方式。在主界面代码中:

    ①.在自定义设置密码对话框(showSetPwdDialog)中,在判断设置密码和确认设置密码相等时,将Editor对象(editor)的putString((String key, String value)方法中的value改为通过新建类(MD5Utils)中的新建方法(md5Encryption)处理后的值,代码为:

1 editor.putString("password", MD5Utils.md5Encryption(password));
View Code

    ①.在输入密码对话框(showinputPwdDialog)中,在判断输入密码和已保存的密码相等时,需要先将输入的密码通过新建类(MD5Utils)中的新建方法(md5Encryption)处理后再与已经保存好的密码进行比较。

代码如下;

1 else if (MD5Utils.md5Encryption(inputpassword).equals(savedpassword)) 
View Code

三、拓展。

  可以对MD5加密后数组再进行多次的MD5加密算法,以提高其安全性!  

posted @ 2015-01-26 16:48  红烧大白鲨  阅读(358)  评论(0编辑  收藏  举报