使用MD5对SharedPreference的重要数据进行加密

来源:互联网 发布:对软件验收标准 编辑:程序博客网 时间:2024/05/16 19:57

嘿嘿,上面我们这样直接把账号密码保存到sp里,如果没root的手机,别的应用倒无法访问手机,如果root了,然后数据给其他应用获取到,然后造成了一些后果,这...就不怪我们了,哈哈,谁叫你root了~,这锅我们不背,的确是这样!但是作为一名有责任心的APP开发人员,我们总不能这样是吧,我们可以使用一些加密算法对用户密码进行加密,另外我们一般加密的都是用户密码!下面我们简画个简单的图帮助大家理解下加密的处理的流程:

1.简单的加密处理流程

流程图如下

流程图解析

  • Step 1.用户注册账号密码,账号密码校验后(账号是否重复,密码位数 > 6位等),即账号密码有效,注册成功后,我们提交给服务器的账号,以及本地加密过的密码!
  • Step 2.服务器端将用户提交的账号,加密过的密码保存到服务端的数据库中,也就是服务端并不会保存我们的明文密码(原始)密码!
  • Step 3.说回客户端,如果注册成功或者登陆成功,你想保存账号密码到SP中,保存的的密码也需要走一趟加密流程!即明文密码——>加密,再保存!如果不保存,每次请求的时候,明文密码也要走一趟家里流程,然后拿着加密后的密码来请求服务器!
  • Step 4.服务器验证账号以及加密密码,成功,分配客户端一个session标识,后续客户端可以拿着这个session来访问服务端提供的相关服务!

嘿嘿,理解了吧,加密的方法有很多种,小猪也不是这方面的高玩,以前使用过的加密方法是MD5加密,本节也给大家简单介绍一下这个MD5加密,以及演示下用法~

2.MD5简单介绍:

1)MD5是什么鬼?:

答:Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护——摘自《百度百科》简单点说就是一种加密算法,可以将一个字符串,或者文件,压缩包,执行MD5加密后,就可以生产一个固定长度为128bit的串!这个串基本唯一!另外我们都知道:一个十六进制需要用4个bit来表示,那么对应的MD5的字符串长度就为:128 / 4 = 32位了!另外可能你看到一些md5是16位的,只是将32位MD5码去掉了前八位以及后八位!不信么,我们来试试百度一下:md5在线解密,第一个:http://www.cmd5.com/

2)MD5能破解吗?

答:MD5不可逆,就是说没有对应的算法,无法从生成的md5值逆向得到原始数据!当然暴力破解除外,简单的MD5加密后可以查MD5库~

3)MD5值唯一吗?

答:不唯一,一个原始数据只对应一个MD5值,但是一个MD5值可能对应多个原始数据!


3.MD5加密实现例子:

其实网上有很多写好的MD5的例子,百度或者谷歌一搜一大堆,这里提供下小猪用的MD5加密工具类!

Md5Util.java

/** * Created by Jay on 2015/9/2 0002. */public class MD5 {    public static String getMD5(String content) {        try {            MessageDigest digest = MessageDigest.getInstance("MD5");            digest.update(content.getBytes());            return getHashString(digest);        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        }        return null;    }    private static String getHashString(MessageDigest digest) {        StringBuilder builder = new StringBuilder();        for (byte b : digest.digest()) {            builder.append(Integer.toHexString((b >> 4) & 0xf));            builder.append(Integer.toHexString(b & 0xf));        }        return builder.toString();    }}

MainActivity.java直接调用getMD5这个静态方法:

Log.e("HeHe", MD5.getMD5("呵呵"));
我们可以看到Logcat上打印出:

这就是加密过后的呵呵了,我们可以把这串密文拷贝到上面这个md5的在线解密网站:

嘿嘿,果然,只是这样加密一次,就直接破解了,有点不安全的样子,那就加密100次咯,就是将加密后的字符串再加密,重复100次,我们在原先的基础上加个加密一百次的方法:

public static String getMD5x100(String content){    String s1 = content;    for(int i = 0;i < 100;i++){        s1 = getMD5(s1);    }    return s1;}

然后调用下,发现打印这个的Log:

复制界面网站上:

好的,装B成功~


0 0
原创粉丝点击