java MessageDiges类中的 MD5实现

在工作中,总是习惯调用jar包中的方法,却从没有字节去实现,趁现在,学习下


public class LearnMessageDigest {
	static String charset ="utf-8";
        //当然还有其他实现方式MD5思想都是 一样的。
	public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
		//目前java1.7中 ,MessageDigest支持6种消息摘要算法
		//MD5 MD2 SHA(SHA-1) SHA-256 SHA-384 SHA-512
		
		MessageDigest messageDigest = MessageDigest.getInstance("MD5");
		//进行摘要计算后返回16个字节
		byte[] digest = messageDigest.digest("liumuen".getBytes(charset));//生成摘要字节后。
		//a3a32ec59e492993d9dee13dca8b895b
		//a3a32ec59e492993d9dee13dca8b895b
		System.out.println(byteToHexString(digest));
		System.out.println(messageDigest.getProvider());
		System.out.println(messageDigest.getDigestLength());
		
	}
	
	static String byteToHexString(byte[] bytes){
		char [] basechar = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
		
		char[] res = new char[bytes.length * 2]; //结果为32位char,转为16进制时一个字节 对应两个16进制字符
		
		for (int i = 0 , j = 0;i < bytes.length;i++) {//对传递进来的16个字节遍历,
    //对某个字节的  前4位进行 带符号右移四位,如果这个自己 为负数那么移位后结果为1000+原本字节前4位,
    与16进制的00001111进行&运算,那么符号为为0,结果为0000+原本字节前4位。然后就得到一个数,转为char
        res[j++] = basechar[ bytes[i] >> 4 & 0x0f];
        //某个字节的后4位进行00001111的&运算,结果就是原本字节的后四位,
			res[j++] =  basechar[   bytes[i] & 0x0f];
		}
		
		return new String(res);
	}
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值