[JAVA][MD5]关于MD5的实现和JAVA生成MD5

>获取完整摘要算法工具类代码:

[JAVA]数字摘要算法工具类——(Hamc)MD5/SHA1/SHA256/SHA512/PBKDF2

 

>Java实现MD5

JAVA JDK中的security包自带了MD5的加密算法,经过加密后,会生成一个128位的二进制序列。

首先导入这个包:

 

import java.security.MessageDigest;


然后编写主要的业务逻辑:

        try {
            //1.获取算法MD5实例
            MessageDigest md = MessageDigest.getInstance("MD5");
            //2.MD5加密
            byte[] buff = md.digest("message digest".getBytes());// "message digest" 就是密文
            //3.将128位的二进制编码转为32位的16进制编码
            String md5str = toHex(buff);
            //4.打印
            System.out.println(md5str);//输出 f96b697d7cb7938d525a2f31aaf161d0
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

其中,128bin -> 32hex的方法如下:

    //将128位的二进制序列转为32位的16进制编码
    public static String toHex(byte[] bytes) {
        String md5str = "";
        for (int i = 0; i < bytes.length; i++) {
            int temp = bytes[i];
            if (temp < 0) temp += 256; // 0x8* 在经过toHexString转化时,会被转为ffffff8*,需要+256保证其正值
            if (temp < 16) md5str += "0"; // 0x05 转化会变成 5,缺少一位0
            md5str+=Integer.toHexString(temp);
        }
        return md5str;
    }

 

>MD5的算法

MD5的主要算法思路有三步:

 

  1. 补位
  2. 分组(小端排序)
  3. 循环

>补位是什么呢?

 

MD5将密文按512分一个大组,然后每32位分一个小组,共16小组。(也就是64字节一个大组,4个字节一个小组)。

密文总长度为len,每条密文最后要留出64位(8个字节)的长度,用于保存原数据的长度len;因此,最后一个大分组必须有448位(56字节)的补位;

举个例子,假如一个密文长度为127位(字节),由于(127%64=63)!=

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值