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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年03月25日 10时30分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
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.io.file()_Java File getUsableSpace()方法
2019-04-21
java httpclient 工具_spring整合httpClient工具类
2019-04-21
java监控其他服务器运行状态_windows服务器监控多个tomcat运行状态
2019-04-21
java构造函数有什么用_java构造函数有什么用,怎么用
2019-04-21
mysql 匹配 隔开的_按空格分隔关键字并搜索MySQL数据库
2019-04-21
java factory用法_怎样使用Java实现Factory设计模式
2019-04-21
盾神与砝码称重java_[蓝桥杯][算法提高VIP]盾神与砝码称重
2019-04-21
java输出狗的各类信息_第九章Java输入输出操作
2019-04-21
java notify怎么用_java 如何使用notify()
2019-04-21
java metrics 怎么样,Java metrics
2019-04-21