import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @Title: MD5Util.java
* @Description: MD5工具类,提供字符串MD5加密(校验)、文件MD5值获取(校验)功能
* @Created on 2015-05-28 上午00:00:00
* @author mazh
* @version $Revision: 1.0 $
*/
public class Utilmd5 {
/**
* 16进制字符集
*/
private static final char HEX_DIGITS[] = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
/**
* 指定算法为MD5的MessageDigest
*/
private MessageDigest messageDigest = null;
/**
* 初始化messageDigest的加密算法为MD5
*/
private Utilmd5() {
try {
this.messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
// TODO error handle
e.printStackTrace();
}
}
public static Utilmd5 New(){
return new Utilmd5();
}
/**
* 获取文件的MD5值
*
* @param file
* 目标文件
* @return MD5字符串
*/
public String getFileMD5String(File file) {
String ret = "";
FileInputStream in = null;
FileChannel ch = null;
try {
in = new FileInputStream(file);
byte[] buffer = new byte[2048];
int length = -1;
while ((length = in.read(buffer)) != -1) {
messageDigest.update(buffer, 0, length);
}
ret = bytesToHex(messageDigest.digest()).substring(8, 24);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (ch != null) {
try {
ch.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return ret;
}
/**
* 获取文件的MD5值
*
* @param fileName
* 目标文件的完整名称
* @return MD5字符串
*/
public String getFileMD5String(String fileName) {
return getFileMD5String(new File(fileName));
}
/**
* MD5加密字符串
*
* @param str
* 目标字符串
* @return MD5加密后的字符串
*/
public String getMD5String(String str) {
return getMD5String(str.getBytes());
}
/**
* MD5加密以byte数组表示的字符串
*
* @param bytes
* 目标byte数组
* @return MD5加密后的字符串
*/
public String getMD5String(byte[] bytes) {
messageDigest.update(bytes);
return bytesToHex(messageDigest.digest());
}
/**
* MD5加密以byte数组表示的字符串
*
* @param bytes
* 目标byte数组
* @return MD5加密后的字符串
*/
public byte[] getMD5Bytes(byte[] bytes) {
messageDigest.update(bytes);
return messageDigest.digest();
}
/**
* 校验密码与其MD5是否一致
*
* @param pwd
* 密码字符串
* @param md5
* 基准MD5值
* @return 检验结果
*/
public boolean checkPassword(String pwd, String md5) {
return getMD5String(pwd).equalsIgnoreCase(md5);
}
/**
* 校验密码与其MD5是否一致
*
* @param pwd
* 以字符数组表示的密码
* @param md5
* 基准MD5值
* @return 检验结果
*/
public boolean checkPassword(char[] pwd, String md5) {
return checkPassword(new String(pwd), md5);
}
/**
* 检验文件的MD5值
*
* @param file
* 目标文件
* @param md5
* 基准MD5值
* @return 检验结果
*/
public boolean checkFileMD5(File file, String md5) {
return getFileMD5String(file).equalsIgnoreCase(md5);
}
/**
* 检验文件的MD5值
*
* @param fileName
* 目标文件的完整名称
* @param md5
* 基准MD5值
* @return 检验结果
*/
public boolean checkFileMD5(String fileName, String md5) {
return checkFileMD5(new File(fileName), md5);
}
/**
* 不关闭stream
* @param in
* @return
*/
public String getStreamMD5String(InputStream in) {
String ret = "";
try {
byte[] buffer = new byte[2048];
int length = -1;
while ((length = in.read(buffer)) != -1) {
messageDigest.update(buffer, 0, length);
}
ret = bytesToHex(messageDigest.digest()).substring(8, 24);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// if (in != null) {
// try {
// in.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
}
return ret;
}
/**
* 将字节数组转换成16进制字符串
*
* @param bytes
* 目标字节数组
* @return 转换结果
*/
public String bytesToHex(byte bytes[]) {
return bytesToHex(bytes, 0, bytes.length);
}
/**
* 将字节数组中指定区间的子数组转换成16进制字符串
*
* @param bytes
* 目标字节数组
* @param start
* 起始位置(包括该位置)
* @param end
* 结束位置(不包括该位置)
* @return 转换结果
*/
public String bytesToHex(byte bytes[], int start, int end) {
StringBuffer sb = new StringBuffer();
for (int i = start; i < start + end; i++) {
sb.append(byteToHex(bytes[i]));
}
return sb.toString();
}
/**
* 将单个字节码转换成16进制字符串
*
* @param bt
* 目标字节
* @return 转换结果
*/
public String byteToHex(byte bt) {
return HEX_DIGITS[(bt & 0xf0) >> 4] + "" + HEX_DIGITS[bt & 0xf];
}
public static void main(String[] args) throws IOException {
Utilmd5 m = new Utilmd5();
System.out.println(m.getMD5String("a"));
}
}
分享到:
相关推荐
JavaScript中的MD5加密工具类是用于对数据进行安全哈希的一种方法,广泛应用于密码存储、数据完整性校验等场景。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的输入转化为固定长度的...
MD5加密算法,主要对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。
在您提供的压缩包中,"js的md5加密字串工具类"很可能包含一个或多个JavaScript文件,这些文件提供了一种简单的方法来实现MD5加密。其中,`debug.js`文件特别指出,它包含了多个方法,这可能意味着我们可以对字符串...
### Java_MD5加密工具类详解 #### 一、概述 在信息安全领域,数据加密是确保数据安全的重要手段之一。MD5(Message-Digest Algorithm 5)作为一种常用的散列算法,在许多场景下被用来生成固定长度的摘要信息。本文...
这个工具被设计成一个独立的类,可以方便地对输入数据进行MD5加密,并生成16位的哈希值。默认情况下,该工具会生成大写的哈希字符串,但通过修改源代码,用户也可以配置它生成小写哈希值。 在描述中提到的“VS2005...
在批处理文件中,可能使用了Java的命令行工具`javac`来编译源代码,并用`java`命令运行生成的类文件,实现MD5加密功能。用户只需提供待加密的字符串,批处理文件将自动调用Java程序计算MD5值并显示结果。 总的来说...
在Java编程中,MD5工具类(如提供的`Md5Util.java`)是用于简化MD5加密过程的实用程序。以下是一些关于MD5工具类的关键知识点: 1. **MD5原理**:MD5算法基于信息摘要理论,它通过特定的数学运算对输入数据进行处理...
以下是一个简单的Java MD5加密工具类示例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { private static final String MD5 = "MD5"; ...
为了更好地理解和使用这个工具类,你需要了解基本的MD5和签名算法原理,并熟悉如何在代码中调用这些工具类的方法。同时,注意MD5虽然快速但已不再被视为安全的哈希算法,因为它容易产生碰撞,不适合用于存储敏感信息...
- `MD5Util` 类:自定义的工具类,通常包含静态方法,如`getMD5(String input)`,用于将字符串转换为MD5摘要。 - `FileMD5Util` 类:扩展了MD5Util,提供了读取文件并计算MD5的方法。 用法.txt: 该文本文件通常会...
结合提供的压缩包文件名"MD5",我们可以推测这个压缩包内可能包含了一个C++实现的MD5校验程序,用户可以直接编译运行,体验MD5的加密和校验过程。 总之,MD5是一种强大的哈希函数,在数据安全和完整性验证中发挥着...
这是一个MD5加密的一个代码类工具,可以对文字,文件,如图片,视频,及其它文件加密。
在描述中提到的"MD5加密解密demo",实际上MD5并不具备可逆的加密特性。MD5是一个单向函数,即给定任意输入,可以很容易地计算出固定的输出(摘要),但无法根据输出反推出原始输入。因此,我们通常不会说"MD5解密",...
本文将详细介绍标题和描述中提到的几种加密算法:AES、MD5、ECC、DES以及RSA,并结合源码库"FlyUtils"探讨它们在跨平台环境下的应用,以及如何支持进度显示和多种编码。 首先,AES(Advanced Encryption Standard)...
在实际应用中,如果你需要进行MD5校验和对比,可以使用各种工具,例如命令行工具`md5sum`(在Unix/Linux系统中)或者Windows自带的“证书管理”工具。对于编程,很多编程语言都有内置的库函数支持MD5计算,如Python...
6. **测试与验证**:为了确保MD5实现的正确性,可以使用已知的MD5测试用例进行校验,或者将计算结果与在线MD5加密工具的输出进行对比。 通过理解以上知识点,你可以使用Delphi轻松实现MD5加密功能。在实际项目中,...