zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    末学者笔记--KVM虚拟机管理(2)
    末学者笔记--OpenStack介绍(1)
    末学者笔记--openstack共享组件:rabbitmq(3)
    末学者笔记--KVM虚拟化(1)
    末学者笔记--Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站
    末学者笔记--Gitlab(二)
    末学者笔记--Git介绍(一)
    末学者笔记--Python模块
    末学者笔记--Python函数三玄
    末学者笔记--Python函数二玄
  • 原文地址:https://www.cnblogs.com/whycxb/p/6862682.html
Copyright © 2011-2022 走看看