首页 / JAVA / 运用Java获取消息摘要
运用Java获取消息摘要
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了运用Java获取消息摘要,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3912字,纯文字阅读大概需要6分钟。
内容图文
![运用Java获取消息摘要](/upload/InfoBanner/zyjiaocheng/1166/42fea78597f14e32b695a57a0cf2f950.jpg)
消息摘要简单介绍
消息摘要算法的主要特征是加密过程不需要 密钥 ,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络相同上使用。由于其加密计算的工作量相当可观,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的。近年来,随着计算机相同性能的飞速改善,加密速度不再成为限制这种加密技术发展的桎梏,因而消息摘要算法应用的领域不断增加。现在,消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体。消息摘要返回的这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般,不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的。因此消息摘要是“伪随机的”。
预知专业的算法介绍,需参考专业书籍。
找出系统支持的消息摘要算法
package date0803; /** * 找出系统支持的消息摘要算法 */ import java.security.Security; public class PrintMessageDigestAlgorithmsAvailable { public static void main(String[] args) { System.out.println("---------系统支持的消息摘要算法有--------"); for (String s : Security.getAlgorithms("MessageDigest")) { System.out.println(s); } } }
支持的算法有:
---------系统支持的消息摘要算法有-------- SHA-384 SHA-224 SHA-256 MD2 SHA SHA-512 MD5
获取消息摘要的线程创建
package date0803; /** * 编写一个程序来计算文件的消息摘要 * 使用线程,便于批量计算文件的消息摘要 * @author zzw922cn */ import java.io.FileInputStream; import java.io.IOException; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.xml.bind.DatatypeConverter; public class FileDigestThread extends Thread { private String filename; /** * * @param filename 文件名 */ public FileDigestThread(String filename) { super(); this.filename = filename; } /** * 线程的主要方法 */ @Override public void run() { try { //文件输入流 FileInputStream fileInputStream = new FileInputStream(filename); //指定算法,创建消息摘要的单例 MessageDigest instance = MessageDigest.getInstance("SHA"); // MessageDigest instance = MessageDigest.getInstance("SHA-512"); // MessageDigest instance = MessageDigest.getInstance("SHA-384"); // MessageDigest instance = MessageDigest.getInstance("SHA-256"); // MessageDigest instance = MessageDigest.getInstance("SHA-224"); // MessageDigest instance = MessageDigest.getInstance("MD5"); // MessageDigest instance = MessageDigest.getInstance("MD2"); //创建摘要输入流,即从特定输入流和消息摘要来创建 DigestInputStream digestInputStream = new DigestInputStream(fileInputStream, instance); //读取字节,并且更新摘要,然后关闭流 while(digestInputStream.read()!=-1) ; digestInputStream.close(); //当所有数据已被更新,调用digest()方法完成哈希计算,返回字节数组 byte[] digest = instance.digest(); //创建字符串构造器,方便字符串的操作 StringBuilder stringBuilder = new StringBuilder(filename); String algorithm = instance.getAlgorithm(); stringBuilder.append("(algorithm:"+algorithm+"):"); //将字节数组转化成字符串 stringBuilder.append(DatatypeConverter.printHexBinary(digest)); //打印消息摘要结果 System.out.println(stringBuilder.toString()); }catch(IOException ex) { System.err.println(ex); } catch (NoSuchAlgorithmException ex) { System.err.println(ex); } } }
运行实例
package date0803; import java.io.File; public class Test1 { public static void main(String[] args) { File file = new File("E:\\数据挖掘课程PPT"); File[] listFiles = file.listFiles(); //对于文件,使用绝对路径,便于查找 for(File subfile:listFiles) { String absolutePath = subfile.getAbsolutePath(); Thread fileDigestThread = new FileDigestThread(absolutePath); fileDigestThread.start(); } } }
运行结果
E:\数据挖掘课程PPT\4LANG.pdf(algorithm:SHA):175561E04F5A14DE82A5557C0EA036831EA5633A E:\数据挖掘课程PPT\1intro.pdf(algorithm:SHA):0F8D1449BA7C195BF7AAADC1351ED02882F7B579 E:\数据挖掘课程PPT\3PREP.pdf(algorithm:SHA):C85278213C0D649355870E6D637D5198DD73B33B E:\数据挖掘课程PPT\5DESC.pdf(algorithm:SHA):58A7F200CDDDA44D09E1F5514C8AA279E3E6E3FE E:\数据挖掘课程PPT\2dw.pdf(algorithm:SHA):15D08FD207C2A680A529C7C18D847CC455E2080A E:\数据挖掘课程PPT\7CLASS.pdf(algorithm:SHA):61CEB6DA12E75AF81EE84B15CBE2E4D23782993B E:\数据挖掘课程PPT\8CLST.pdf(algorithm:SHA):B6AFE6FC67EE89E89860B7CF13B9550B9DCDF4FE E:\数据挖掘课程PPT\10APPL.pdf(algorithm:SHA):8C6429D5A1DB0D8CE4DF8D9933C2A08FE0065976 E:\数据挖掘课程PPT\6ASSO.pdf(algorithm:SHA):4D04780EBB487C1AA014C631A5E5CB5305E6EE31 E:\数据挖掘课程PPT\9CMPLX.pdf(algorithm:SHA):B135431328FDC5ABC965C01B0FD126C21533F5EB
原文:http://my.oschina.net/zzw922cn/blog/487043
内容总结
以上是互联网集市为您收集整理的运用Java获取消息摘要全部内容,希望文章能够帮你解决运用Java获取消息摘要所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。