`
chenhua_1984
  • 浏览: 1251149 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

java算文件的MD5值,16进制的表示形式

    博客分类:
  • java
阅读更多

先贴以下代码:

package com.hua.md5.test;

import java.io.*;
import java.security.*;

public class HashFile {

	/**
	 * @param args
	 */
	public static char[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
			'8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

	public static void main(String[] args) {
		String fileName = "F:\\soft\\Firefox.exe";
		String hashType = "MD5";
		try {
			System.out.println(hashType + " == " + getHash(fileName, hashType));
			hashType = "SHA1";
			System.out.println(hashType + " == " + getHash(fileName, hashType));
			hashType = "SHA-256";
			System.out.println(hashType + " == " + getHash(fileName, hashType));
			hashType = "SHA-384";
			System.out.println(hashType + " == " + getHash(fileName, hashType));
			hashType = "SHA-512";
			System.out.println(hashType + " == " + getHash(fileName, hashType));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static String getHash(String fileName, String hashType)
			throws Exception {
		InputStream fis;
		fis = new FileInputStream(fileName);
		byte[] buffer = new byte[1024];
		MessageDigest md5 = MessageDigest.getInstance(hashType);
		int numRead = 0;
		while ((numRead = fis.read(buffer)) > 0) {
			md5.update(buffer, 0, numRead);
		}
		fis.close();
		return toHexString(md5.digest());
	}

	public static String toHexString(byte[] b) {
		StringBuilder sb = new StringBuilder(b.length * 2);
		for (int i = 0; i < b.length; i++) {
			sb.append(hexChar[(b[i] & 0xf0) >>> 4]);
			sb.append(hexChar[b[i] & 0x0f]);
		}
		return sb.toString();
	}
}

 关于java的MD5算法:主要使用MessageDigest类。

public abstract class MessageDigest
extends MessageDigestSpi

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

MessageDigest 对象开始被初始化。该对象通过使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算。

对于给定数量的更新数据,digest 方法只能被调用一次。digest 被调用后,MessageDigest 对象被重新设置成其初始状态。

代码解析:

String fileName = "F:\\soft\\Firefox.exe";//文件的位置
		String hashType = "MD5"; //类型
		try {
			System.out.println(hashType + " == " + getHash(fileName, hashType));
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 
public static String getHash(String fileName, String hashType)
			throws Exception {
		InputStream fis;
		fis = new FileInputStream(fileName);//读取文件
		byte[] buffer = new byte[1024];
		MessageDigest md5 = MessageDigest.getInstance(hashType);
		int numRead = 0;
		while ((numRead = fis.read(buffer)) > 0) {
			md5.update(buffer, 0, numRead);
		}
		fis.close();
		return toHexString(md5.digest());
	}

   getInstance()方法

 

public static MessageDigest
 getInstance
(String
 algorithm)
                                 throws NoSuchAlgorithmException
生成实现指定摘要算法的 MessageDigest 对象。如果默认的提供程序包提供所请求的摘要算法的实现,则返回包含该实现的 MessageDigest 的实例。如果默认包中不存在该算法,则搜索其他包。

 

参数:
algorithm - 所请求算法的名称。有关标准算法名称的信息,请参阅《Java Cryptography Architecture API Specification & Reference 》中的附录 A。
返回:
实现指定算法的 Message Digest 对象。
抛出:
NoSuchAlgorithmException - 如果算法在调用方环境中不可用。
public static MessageDigest
 getInstance
(String
 algorithm,
                                        String
 provider)
                                 throws NoSuchAlgorithmException
,
                                        NoSuchProviderException
生成实现指定提供程序提供的指定算法的 MessageDigest 对象,如果该算法可从指定的提供程序得到的话。

 

参数:
algorithm - 所请求算法的名称。有关标准算法名称的信息,请参阅《Java Cryptography Architecture API Specification & Reference 》中的附录 A。
provider - 提供程序的名称。
返回:
实现指定算法的 Message Digest 对象。
抛出:
NoSuchAlgorithmException - 如果请求的提供程序提供的包中不存在该算法。
NoSuchProviderException - 如果提供程序在环境中不可用。
IllegalArgumentException - 如果提供程序的名称为 null 或空。

update()方法:

update

public void update
(byte input)
使用指定的字节更新摘要。

 

参数:
input - 用于更新摘要的字节。

<!-- -->

update

public void update
(byte[] input,
                   int offset,
                   int len)
使用指定的字节数组,从指定的偏移量开始更新摘要。

 

参数:
input - 字节数组。
offset - 字节数组中的偏移量,操作从此处开始。
len - 要使用的字节数,始于 offset

<!-- -->

update

public void update
(byte[] input)
使用指定的字节数组更新摘要。

 

参数:
input - 字节数组。

<!-- -->

update

public final void update
(ByteBuffer
 input)
使用指定的 ByteBuffer 更新摘要。使用始于 input.position() 处的 input.remaining() 个字节更新摘要。一旦返回,该缓冲区的位置将等于它的界限;它的界限将不会更改。

 

参数:
input - ByteBuffer
从以下版本开始:
1.5


digest

public byte[] digest
()
通过执行诸如填充之类的最终操作完成哈希计算。调用此方法后摘要被重置。

 

返回:
存放哈希值结果的字节数组。

<!-- -->

digest

public int digest
(byte[] buf,
                  int offset,
                  int len)
           throws DigestException
通过执行诸如填充之类的最终操作完成哈希计算。调用此方法后摘要被重置。

 

参数:
buf - 存放计算摘要的输出缓冲区
offset - 输出缓冲区中的偏移量,从此处开始存储摘要。
len - 在 buf 中分配给摘要的字节数
返回:
放到 buf 中的字节数
抛出:
DigestException - 如果发生错误。

<!-- -->

digest

public byte[] digest
(byte[] input)
使用指定的字节数组对摘要进行最后更新,然后完成摘要计算。也就是说,此方法首先调用 update(input) ,向 update 方法传递 input 数组,然后调用 digest()

 

参数:
input - 在完成摘要计算前要更新的输入。
返回:
存放哈希值结果的字节数组。
分享到:
评论
1 楼 zhuchao_ko 2012-10-22  

相关推荐

    JS 生成MD5值和JAVA生成MD5值,自己测试过很好用

    MD5(Message-Digest Algorithm 5)是一种广泛用于数据安全的哈希函数,它能够将任意长度的数据转化为固定长度的128位(16字节)摘要,通常以32位十六进制数的形式表示。在JS和JAVA中生成MD5值的主要目的是确保数据...

    java MD5加密工具类

    MD5算法是一种非对称的加密算法,它将输入的信息通过一系列复杂的数学运算,最终得到一个128位的摘要信息,通常以32位的16进制字符串形式表示。由于MD5的单向性,即从原始信息恢复原始数据非常困难,因此常用于数据...

    JAVA 生成文件的MD5码

    这个摘要信息通常是一个128位的二进制数,通常以32位的十六进制形式表示。在Java编程语言中,生成文件的MD5码是常见的需求,例如用于文件校验、数据完整性的验证等。这篇博客“JAVA 生成文件的MD5码”可能讲述了如何...

    Md5.java.rar_MD5 JAVA_MD5.ja_java md5_md5_md5 java realization

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入数据转换成一个固定长度的输出,通常为128位,以32位十六进制数字的形式表示。在Java中,MD5常用于数据校验、密码存储等场景,...

    文件MD5值检测源码.rar

    标题中的“文件MD5值检测源码.rar”可能包含了一组用于计算和验证文件MD5值的编程源代码。这通常涉及以下关键知识点: 1. **MD5算法原理**:MD5是一种单向散列函数,它将任意长度的数据转化为固定长度的128位(16...

    MD5算法的JavaBean.rar_md5_md5 文件比对 java_md5算法_指纹_计算 文件 MD5

    MD5(Message-Digest Algorithm 5)是一种广泛应用于信息安全领域的哈希函数,它能将任意长度的数据转换为固定长度的128位(16字节)摘要,通常以32位十六进制数的形式表示。这个算法由Ron Rivest在1991年设计,主要...

    MD5加密程序java代码.rar_MD5 JAVA_java md5_md5

    例如,当你下载一个大文件时,服务器会提供该文件的MD5校验码,你可以通过计算本地文件的MD5值并与服务器提供的值对比,确保文件在传输过程中没有被篡改。 然而,由于MD5的安全性问题,对于敏感信息如用户密码,...

    计算文件MD5

    6. **输出MD5值**:将生成的MD5值以32位的16进制字符串形式输出,用于比较或记录。 从提供的文件列表来看,`FileMD5.sln`是一个Visual Studio解决方案文件,可能包含了实现文件MD5计算的C#项目。`release`目录则...

    jar包MD5加密包含用法

    5. **转换为十六进制字符串**:通常我们以十六进制字符串形式展示MD5值,所以需要将字节数组转换为字符串。 ```java StringBuilder hexString = new StringBuilder(); for (byte b : digestBytes) { hexString....

    java实现MD5加密算法

    6. **MD5的应用**:在Java中,MD5常用于验证文件完整性,比如下载文件后检查MD5值是否与原始文件一致。此外,过去也曾用于密码存储,但现在通常会使用更安全的哈希算法如SHA-256,并配合盐值和迭代次数增加安全性。 ...

    java md5 check tool

    总结来说,Java MD5 Check Tool 是一个用于计算文件MD5校验和的工具,通过它可以快速验证文件是否未被篡改。这个工具的核心是Java的`MessageDigest`类,它利用MD5算法生成文件的唯一标识。用户可以利用这个工具来...

    MD5-java版

    MD5,全称为Message-Digest Algorithm 5,是一种广泛使用的哈希..."MD5-mask"可能是这个工具类的源代码文件,通过查看这个文件,我们可以学习如何在Java中实现MD5加密,或者直接在项目中引入这个类以快速实现MD5功能。

    java实现MD5加密.pdf

    根据提供的文件信息,我们可以深入探讨MD5加密技术及其在Java中的实现细节。MD5(Message-Digest Algorithm 5)是一种广泛使用的散列算法,用于生成一个固定长度(通常是128位)的散列值或摘要。这种摘要通常用于...

    MD5_java.rar_MD5 JAVA_java md5_md5_md5算法

    在Java编程语言中,MD5算法通常用于生成固定长度的128位(16字节)摘要,这个摘要通常以32位十六进制数字的形式呈现。 在给定的"MD5_java.rar"压缩包中,包含了两个文件:`MD5_java.java`和`www.pudn.com.txt`。`MD...

    JAVA生成MD5校验码

    这个过程是不可逆的,也就是说,从MD5值无法直接还原原始数据。MD5在很多场景下被用作数据完整性校验,比如验证文件的下载是否完整、密码存储等。 在JAVA中,生成MD5校验码涉及到以下几个关键知识点: 1. **`java....

    Java_MD5加密工具类

    1. **转换字节数组为16进制字符串**:将字节数组转换成16进制形式的字符串表示。 2. **转换单个byte为16进制字符串**:将一个byte值转换为其对应的16进制字符串。 3. **MD5编码**:对输入的原始字符串进行MD5加密...

    android对文件的MD5验证

    在Android应用中,我们可以使用Java的`java.security.MessageDigest`类来计算文件的MD5值。以下是一个简单的步骤: 1. **导入相关库**:在Java代码中,你需要导入`java.security.MessageDigest`和`java.io....

    MD5Encoder.rar_MD5 JAVA_MD5Encoder

    在实际应用中,MD5常用于验证文件完整性,比如下载文件后,可以计算本地文件的MD5值并与服务器提供的MD5值进行对比,确保文件在传输过程中未被篡改。对于密码存储,虽然MD5已被认为不够安全,因为存在碰撞攻击的可能...

    数据加密MD5(包括javascript代码和java代码实现的两种方式)

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入数据转换成固定长度的128位(16字节)摘要,通常以32位十六进制数的形式表示。MD5的主要用途是验证数据的完整性和一致性,比如...

Global site tag (gtag.js) - Google Analytics