Md5加密

Md5消息摘要

以下是实现md5加密

package com.eminen.util;

import java.security.MessageDigest;

public class Md5Util {

    public static String str2Md5(String str) throws Exception {

        MessageDigest md = null;
        md = MessageDigest.getInstance("MD5");

        // 把字符串转byte数组进行消息摘要计算。得到一个byte数组
        md.reset();
        md.update(str.getBytes());
        byte[] byteArr = md.digest();

        // 或者简单用
        // byteArr = md.digest(str.getBytes());

        // 二进制 0-1----》转16进制 0-F
        char[] hexArr = encodeHex(byteArr);

        // 把字符数组编程字符串
        String finalStr = new String(hexArr);

        System.out.println("16位大写:" + finalStr.substring(8, 24));
        System.out.println("32位大写:" + finalStr);
        return finalStr;
    }

    // 主要代码:byte数组转为16进制字符数组
    private static char[] encodeHex(byte[] byteArr) {
        int len = byteArr.length;
        // len = 16(10进制) = 10000 左移1位 100000 =32(10进制)
        char[] out = new char[len << 1];
        for (int i = 0, j = 0; i < len; i++) {
            // 一个byte有8bit=1111,1111,每4个bit就是0-F.所以一个byte就是两个16进制
            // 获取高4位就要 把低四位的移走,就要把这8bit往右边移动4位,再与0x0f运算,得到16进制高1位
            // 获取低4位就直接与0x0f = 0000,1111进行与运算后,高位与0运算后都是0.低位与1运算后,有0为0。都1才1。得到16进制低1位
            // 比如 24的8bit = 00011000 = 0001,1000 = 1,8
            int hi = (byteArr[i] >> 4) & 0x0f;
            int lo = byteArr[i] & 0x0f;
            // 再把10进制转为16进制.forDigit返回的是int,再转为char
            // 'a'=97,b=98..... ('a'-10)=87+(》=10的)97以上的就是字符a开始算了
            out[j++] = Character.forDigit(hi, 16);
            out[j++] = Character.forDigit(lo, 16);
        }
        return out;
    }

    public static void main(String[] args) throws Exception {
        String str = "ab";
        Md5Util.str2Md5(str);
    }
}

 

参考资料:

1.http://my.oschina.net/u/2519530/blog/536372

转载于:https://www.cnblogs.com/chenyaqiang/p/5863257.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值