MD5单向,加密算法-java

md5算法是一种常见的单项加密算法,例如mysql中的MD5()函数;

今天记录一下关于Java模块的md5加密算法应用 与编写;

md可以用到hibernate;
模块位于java.security.MessageDigest;

即是信息摘要处理包的意思,
sha,Md5,都有,

md5的加密方法就是对于一个字符串,
将它化为一个字节数组,对字节数组处理
将每个字节拆分为两个16进制的16进制符,拼接起来

具体可以将字节 向上 转成int型
由byte知道它小于int,不会丢失,

1byte=8bit
转化整数一定不会大于256,无符号

,再对(int)byte取余,除以16,得到两个下标,通过数组转化

参考代码:

package com.j.tool;

import java.security.MessageDigest;

/**
 * 获取MD5处理的摘要
 * 
 * @author joker
 *
 */

public class MD5Util {
	private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
			"e", "f" };

	/**
	 * md5摘要,
	 * 
	 * @param string 要加密文本
	 * @return
	 */
	public static String getMD5(String string) {

		String result = "";
		try {
			// 获取MD5算法
			MessageDigest messageDigest = MessageDigest.getInstance("MD5");
			// 转化密文字节流
			messageDigest.update(string.getBytes("utf-8"));
			// 计算摘要
			byte[] bs = messageDigest.digest();
			result = MD5Util.byteArrayToHexString(bs);
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		return result.toString().toUpperCase();
	}
	/**
	 * 加密; 将字节数组里每个字节转成2个16进制位的字符串后拼接起来
	 */
	private static String byteArrayToHexString(byte b[]) {
		StringBuffer resultSb = new StringBuffer();
		for (int i = 0; i < b.length; i++) {
			resultSb.append(byteToHexString(b[i]));
		}
		return resultSb.toString();
	}

	/**
	 * 加密 将1个字节(1 byte = 8 bit)转为 2个十六进制位 1个16进制位 = 4个二进制位 (即4 bit)
	 * 转换思路:最简单的办法就是先将byte转为10进制的int类型,然后将十进制数转十六进制
	 */
	private static String byteToHexString(byte b) {
		// byte类型赋值给int变量时,java会自动将byte类型转int类型,从低位类型到高位类型自动转换
		int n = b;

		// 将十进制数转十六进制
		//符号
		if (n < 0)
			n += 256;
		int d1 = n / 16;
		int d2 = n % 16;

		// d1和d2通过访问数组变量的方式转成16进制字符串;比如 d1 为12 ,那么就转为"c";
		// 因为int类型不会有a,b,c,d,e,f等表示16进制的字符
		return hexDigits[d1] + hexDigits[d2];
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值