MessageDigest获取字符串或文件MD5详解
发布日期:2021-10-07 06:13:04 浏览次数:1 分类:技术文章

本文共 1939 字,大约阅读时间需要 6 分钟。

MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。

MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
可以用于
加密密码。
数据校验。例:下载文件时保证文件的完整性。
public static String InputStreamMd5(InputStream is){		String md5 ="";		try {			MessageDigest ms = MessageDigest.getInstance("MD5");			byte[] bytes = new byte[1024*3];			int read = 0;			try {				while((read = is.read(bytes)) !=-1){					ms.update(bytes, 0, read);				}				//拿到结果				byte[] result = ms.digest();				StringBuilder sb = new StringBuilder();//默认为16//				StringBuilder sb = new StringBuilder(32);//初始容量设置为32				 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去				for(byte b : result){					sb.append(hexDigits[b>>>4 & 0xf]);					sb.append(hexDigits[b&0xf]);				}				md5 = sb.toString();			} catch (IOException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}					} catch (NoSuchAlgorithmException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}			return md5;	}
public static String StringMd5(String input){		byte[] result = null;		try {			MessageDigest md = MessageDigest.getInstance("MD5");			byte[] inputByteArray = input.getBytes();			md.update(inputByteArray);		 result = md.digest(inputByteArray);					} catch (NoSuchAlgorithmException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}						return byteArrayToHex(result);	}	/**	 * 字节数组转16进制字符串	 * @param byteArray	 * @return	 */	public static String byteArrayToHex(byte[] byteArray){		char[] hexDigits = "0123456789abcdef".toCharArray();		char[] resultCharArray =new char[byteArray.length * 2];		int index = 0;		  for (byte b : byteArray) {		     resultCharArray[index++] = hexDigits[b>>> 4 & 0xf];		     resultCharArray[index++] = hexDigits[b& 0xf];		  }			return new String(resultCharArray);	}

转载地址:https://blog.csdn.net/mengmengkenanjun/article/details/53366670 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:关于Android Wifi NetworkId的一些理解。
下一篇:String 的compareto函数

发表评论

最新留言

不错!
[***.144.177.141]2024年03月25日 10时30分09秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Java get set 同步_java – getResultSet()“每个结果只能调用一次” 2019-04-21
java jmx 配置_为什么在配置JMX时Java打开3个端口? 2019-04-21
java thread回调_使用Runnable在Java中实现回调 2019-04-21
java 内存区_Java内存模型和Java内存区域的区别和联系? 2019-04-21
java定时任务监控_Spring定时任务使用及如何使用邮件监控服务器 2019-04-21
java crc32 使用_Java CRC32的用法 2019-04-21
java读取unicode_java怎么样将unicode解码读取?Java读取本地文件进 2019-04-21
java.io.file()_Java File getUsableSpace()方法 2019-04-21
java httpclient 工具_spring整合httpClient工具类 2019-04-21
java监控其他服务器运行状态_windows服务器监控多个tomcat运行状态 2019-04-21
java给学生按总成绩排名_java - 输入学生成绩,取它们的平均值,然后通过排名等级的学生 - SO中文参考 - www.soinside.com... 2019-04-21
java构造函数有什么用_java构造函数有什么用,怎么用 2019-04-21
mysql 匹配 隔开的_按空格分隔关键字并搜索MySQL数据库 2019-04-21
java factory用法_怎样使用Java实现Factory设计模式 2019-04-21
java窗口内容如何复制_求助Java窗口菜单如何实现复制粘贴剪切等功能(内附源代码)... 2019-04-21
盾神与砝码称重java_[蓝桥杯][算法提高VIP]盾神与砝码称重 2019-04-21
java输出狗的各类信息_第九章Java输入输出操作 2019-04-21
java notify怎么用_java 如何使用notify() 2019-04-21
java加载指定文件为当前文本,java:如何使用bufferedreader读取特定的行 2019-04-21
java metrics 怎么样,Java metrics 2019-04-21