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));
	}
}

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C++

python笔记:#005#算数运算符

1632
来自专栏Android干货园

Kotlin中级(8)- - - Kotlin类之接口、枚举.md

772
来自专栏WebDeveloper

跟我学习php数组常用函数-下篇

如果是递归的,结果:array('hobby' => array('a' => 'ping-pong', 'b' => 'basketball'));

1032
来自专栏水击三千

JavaScript操作符(一元操作符、位操作符)

JavaScript操作符包括算术操作符、位操作符、关系操作符和相等操作符。只能操作一个值的操作符叫做一元操作符。 递增和递减操作符 递增和递减操作符有两个版本...

3146
来自专栏Android开发与分享

【Android】RxJava的使用(三)转换——map、flatMap

4215
来自专栏hbbliyong

Python正则进阶

  返回一个列表,如果正则表达式中没有分组,则列表中包含的是所有匹配的内容,如果正则表达式中有分组,则列表中的每个元素是一个元组,元组中包含子分组中匹配到的内容...

1353
来自专栏Albert陈凯

Scala Essentials: 字面值

https://segmentfault.com/a/1190000004854613 类型系统 ? 引用类型 AnyRef 的子类 使用new 构造对象...

2524
来自专栏抠抠空间

面向对象基础

1 class Person: #定义一个Person类;类名后面可以加括号,也可以不加。类名第一...

2816
来自专栏进击的君君的前端之路

字符串与JSON

6093
来自专栏阮一峰的网络日志

Ramda 函数库参考教程

学习函数式编程的过程中,我接触到了 Ramda.js。 我发现,这是一个很重要的库,提供了许多有用的方法,每个 JavaScript 程序员都应该掌握这个工具。...

8828

扫码关注云+社区

领取腾讯云代金券