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 }

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

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

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

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

代码如下;

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

三、拓展。

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

时间: 2024-10-26 03:40:06

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

Android实例-手机安全卫士(四十二)-设置自定义Toast位置

一.目标 设置自定义Toast窗口的显示位置(第1-2步): 二.代码实现 1.在“显示号码归属地”服务(ShowPhoneAddService)类中的自定义吐司(myToast)方法中,通过窗口对象WindowManager.LayoutParams(params)的gravity属性可设置自定义Toast的对齐方式(顶部:Gravity.TOP,左上角:Gravity.TOP+Gravity.LEFT): 2.通过窗口对象WindowManager.LayoutParams(params)的

Android实例-手机安全卫士(四十)-自定义吐司(二)(布局样式、背景)

一. 自定义Toast的布局.背景等 二.代码实现 1.在res文件夹下的layout文件夹中新建布局文件(Android xml file,取名phone_add_toast),用于定义要显示的Toast的布局方式: 2.根据设计要求自定义的Toast布局为左右的水平线性布局,宽高均为包裹内容,左边为图片,右边为归属地信息文本(由于归属地信息会根据号码不同而改变,因此可为其设置id(tv_phone_add_toast)): (1)图片采用<ImageView>组件,通过android:sr

Android实例-手机安全卫士(四十三)-自由移动自定义Toast位置

一.目标 实现自定义的Toast窗口在来电时可以自由移动至屏幕的任意位置,并保存该位置 二.代码实现 1.在“显示号码归属地”服务(ShowPhoneAddService)类中的自定义吐司(myToast)方法中,在窗口对象WindowManager.LayoutParams(params,该变量在后面的移动显示位置时需要用到,所以将其定义成服务类的成员变量)的便签(flag)属性里,需删除不可触摸属性(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)

Android实例-手机安全卫士(十八)-完成设置向导的4个UI和跳转事件

一.目标. 制作向导设置里面每一步的UI布局及点击事件控制. 1.使用自定义button背景.自定义组合控件.自定义文本样式等. 2.利用SharedPreferences对象,设置应用程序配置信息(向导设置完成后就不再进入)           二.代码实现. 1.在程序包下新建另外3个UI的类(分别为SetupWizard_ui_2.java.SetupWizard_ui_3.java.SetupWizard_ui_4.java),并在配置文件中注册Activity. 2.根据UI设计,在设

Android实例-手机安全卫士(三)-设计主页面UI

一.目标. 主界面UI如图所示: 方面是一个功能列表提示框(采用TextView),下面是功能列表(采用GridView). 二.代码实现. 1.在主界面布局文件(activity_home.xml)中增加组件.主界面布局文件(activity_home.xml)采用线性布局,上面一个TextView,根据UI设置相应属性:下面一个是GridView,通过android:numColumns属性设置该组件的列数,由于GridView还需要inflate单个布局文件,所以为其设置id. 主界面布局

Android实例-手机安全卫士(三十四)-优化归属地查询

一.目标 1.处理110.10086.座机等非手机号码的归属地: 二.代码实现 1.判断输入框中的文本是否符合手机号码的格式(1开头,第二位是345678,后面9位均为0-9的整数),根据手机号码的特点确定其正则表达式为“1[345678]\d{9}”,在代码中正则表达式以“^”开头,以“$”结束,同时里面的“\”需要转义,所以判断条件为“^1[345678]\\d{9}$”.上述正则表达式说明:[345678]表示“[]”里面的数任取一个,\d表示0-9的数任取一个,{9}表示前面的\d正好匹

Android实例-手机安全卫士(十)-自定义对话框

一.目标. 当点击“手机防盗”时弹出自定义的设置密码对话框.如果已经设置密码,则弹出自定义的输入密码对话框. 二.代码实现. 1.在layout文件夹下新建xml(取名setpwddialog.xml)文件用于设置自定义对话框的UI. 新建xml文件代码如下; 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.a

Android实例-手机安全卫士(二十六)—获取手机内联系人信息

一.目标. 通过内容解析器获取手机联系人信息,并采用自定义的样式显示. 为了便于介绍和重复使用,重新建立一个”读取联系人“工程. 二.代码实现. 1.新建工程,取名为”读取联系人“.在布局文件(activity_main.xml)中,采用ListView组件(其ID为select_contact). 布局文件代码: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmln

Android实例-手机安全卫士(十二)-制作输入密码对话框并设置相应点击事件

一.目标. 自定义输入密码对话框,根据输入的密码与保存着的密码进行判断. 二.代码实现. 1. 采用第十节的方法自定义一个输入密码的对话框. 2.为按钮设置点击事件,主要介绍“确认”按钮的点击事件. ①.通过TextView对象的getText()得到文本并通过toString()转成字符串再通过trim()去除空格,得到String对象的输入密码: ②.通过SharedPreferences对象的getString(String key, String defValue)获得保存着的密码,参数