WebUtils【MD5加密(基于MessageDigest)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处!
前言
用于MD5加密,主要场景是在调用登录接口时对密码进行MD5加密处理。
效果图
暂不需要
代码分析
基于Java.security.MessageDigest这个包;
实现思路:
- 生成实现指定摘要算法的 MessageDigest 对象,其中传入的参数指定计算消息摘要所使用的算法,常用的有"MD5","SHA"等;
- 生成要加密的字符串的字节类型数组数组;
- 计算消息摘要,返回字节类型的数组;
- 将计算结果(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/