MD5压缩算法

package cn.com.test;
/* 传入参数: 一个字节数组
 * 传出参数: 字节数组的MD5结果字符集
 */
public class MD5 {

	public static String getMD5 (byte[] source){
		String s = null;
		//用来将字节转换成十六进制表示的字符
		char hexDigits[] = {'0' ,'1', '2', '3', '4' ,'5' ,'6', '7','8','9','a','b','c','d','e','f'};
		
		try {
			java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
			md.update(source);
			//MD5 的计算结果是一个128位的长整数,用字节表示就是16个字节
			byte tmp[] = md.digest();
			//每个字节用十六进制表示的话,使用两个字符,所以表示成十六进制需要32个字符
			char str[] = new char[16*2];
			//表示转换结果中对应的字符位置
			int k = 0;
			for (int i= 0;i< 16;i++){
				//从第一个字节开始,将MD5的每一个字节转换成十六进制字符
				//取第i个字节
				byte byte0 = tmp[i];
				// 取字节中高4位的数字转换,>>> 为逻辑右移,将符号位一起右移
				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
				//去字节中低4位的数字转换
				str[k++] = hexDigits[byte0 & 0xf];				
			}
			s = new String(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return s;
	}
	public static void main(String[] args) {
		byte byarr[] = {'1','2','3','!','@','#'};
		System.out.println(MD5.getMD5(byarr));
	}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

3 条评论
登录 后参与评论

相关文章

来自专栏mathor

单调栈

 给你一个数组,要求你找到数组中每个元素左边第一个比他大的数和右边第一个比它大的数,举个例子,数组[3,5,2,1,6],3左边比他大的没有,右边比他大的是5;...

591
来自专栏皮皮之路

【JDK1.8】JDK1.8集合源码阅读——LinkedList

1313
来自专栏java学习

来测试一下你对数据结构中的栈和队列的了解有多少?

选择题 1.向一个栈顶指针为top的链栈中插入一个结点s,执行( )。 A.top.next=s; B.s.next=top.next ;top.next=s;...

5349
来自专栏皮皮之路

【JDK1.8】JDK1.8集合源码阅读——LinkedList

30412
来自专栏一直在跳坑然后爬坑

Kotlin之“ArrayList”

972
来自专栏Java技术

为什么Java中1000==1000为false而100==100为true?

基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。

974
来自专栏noteless

JavaSE之Long 详解 Long的方法简介以及用法

java.lang.Long.valueOf(String, int)是借助于parseLong进行转换

1232
来自专栏互联网开发者交流社区

Java逻辑

1234
来自专栏于晓飞的专栏

读 Java TimSort算法 源码 笔记

本来准备看Java容器源码的。但是看到一开始发现Arrays这个类我不是很熟,就顺便把Arrays这个类给看了。Arrays类没有什么架构与难点,但Arrays...

702
来自专栏面朝大海春暖花开

mybatis递归,一对多代码示例

由于只有这么两级,可以不用使用递归,直接查询父集,之后foreach查询子集放入对应的list集合。

611

扫码关注云+社区