WebUtils【MD5加密(基于MessageDigest)】

版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

用于MD5加密,主要场景是在调用登录接口时对密码进行MD5加密处理。

效果图

暂不需要

代码分析

基于Java.security.MessageDigest这个包;

实现思路:

  1. 生成实现指定摘要算法的 MessageDigest 对象,其中传入的参数指定计算消息摘要所使用的算法,常用的有"MD5","SHA"等;
  2. 生成要加密的字符串的字节类型数组数组;
  3. 计算消息摘要,返回字节类型的数组;
  4. 将计算结果(byte数组)转换为字符串。

使用步骤

一、项目组织结构图

注意事项:

1、导入类文件后需要change包名以及重新import R文件路径

2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

将WebUtil文件复制到项目中

package com.why.project.webutilsdemo.utils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;


/**
 * Created HaiyuKing
 * Used  MD5加密(基于MessageDigest)
 */
public class WebUtils {
    
    /**
     * MD5加密,32位
     * param str - 加密前的字符串
     * http://hubingforever.blog.163.com/blog/static/171040579201210781650340/
     * <br/>1、生成实现指定摘要算法的 MessageDigest 对象,其中传入的参数指定计算消息摘要所使用的算法,常用的有"MD5","SHA"等。
     * <br/>2、生成要加密的字符串的字节类型数组数组
     * <br/>3、计算消息摘要,返回字节类型的数组
     * <br/>4、将计算结果(byte数组)转换为字符串
     * str - password
     * return 5f4dcc3b5aa765d61d8327deb882cf99
     * */
    public static String MD5(String str)
    {
        MessageDigest md5 = null;
        try
        {//生成实现指定摘要算法的 MessageDigest 对象,其中传入的参数指定计算消息摘要所使用的算法,常用的有"MD5","SHA"等。
            md5 = MessageDigest.getInstance("MD5");
        } catch (Exception e)
        {
            e.printStackTrace();
            return "";
        }
        
        //生成要加密的字符串的字节类型数组数组
        char[] charArray = str.toCharArray();
        byte[] byteArray = new byte[charArray.length];
        for (int i = 0; i < charArray.length; i++)
        {
            byteArray[i] = (byte) charArray[i];
        }

        //计算消息摘要,返回字节类型的数组
        byte[] md5Bytes = md5.digest(byteArray);
        
        //将计算结果(byte数组)转换为字符串
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++)
        {
            int val = (md5Bytes[i]) & 0xff;
            if (val < 16)
            {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();
    }

    /**
     * 返回的结果跟上一个方法一致
     * */
    public static String MD5_2(String str)
    {
        MessageDigest md5 = null;
        try
        {//生成实现指定摘要算法的 MessageDigest 对象,其中传入的参数指定计算消息摘要所使用的算法,常用的有"MD5","SHA"等。
            md5 = MessageDigest.getInstance("MD5");
        } catch (Exception e)
        {
            e.printStackTrace();
            return "";
        }

        //生成要加密的字符串的字节类型数组数组
        byte[] byteArray1 = null;
        try {
            byteArray1 = str.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        md5.update(byteArray1);
        //计算消息摘要,返回字节类型的数组
        byte[] md5Bytes = md5.digest();

        //将计算结果(byte数组)转换为字符串
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++)
        {
            int val = (md5Bytes[i]) & 0xff;
            if (val < 16)
            {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();
    }
    
}

注意:MD5和MD5_2两个方法返回的结果相同,使用其中一个即可。

三、使用方法

package com.why.project.webutilsdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.why.project.webutilsdemo.utils.WebUtils;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String md5= WebUtils.MD5("password");
        Log.w("MainActivity","md5="+md5);
    }
}

打印日志如下:

混淆配置

参考资料

MessageDigest简介 

http://hubingforever.blog.163.com/blog/static/171040579201210781650340/

项目demo下载地址

https://github.com/haiyuKing/WebUtilsDemo

posted @ 2017-05-21 15:07  HaiyuKing  阅读(713)  评论(0编辑  收藏  举报