`
mzh_2008beijing
  • 浏览: 233462 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MD5加密(校验)工具类代码

 
阅读更多
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"));
    }
}
分享到:
评论

相关推荐

    JS(javascript)-md5加密工具类

    JavaScript中的MD5加密工具类是用于对数据进行安全哈希的一种方法,广泛应用于密码存储、数据完整性校验等场景。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的输入转化为固定长度的...

    MD5加密工具类

    MD5加密算法,主要对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

    js的md5加密字串工具类

    在您提供的压缩包中,"js的md5加密字串工具类"很可能包含一个或多个JavaScript文件,这些文件提供了一种简单的方法来实现MD5加密。其中,`debug.js`文件特别指出,它包含了多个方法,这可能意味着我们可以对字符串...

    Java_MD5加密工具类

    ### Java_MD5加密工具类详解 #### 一、概述 在信息安全领域,数据加密是确保数据安全的重要手段之一。MD5(Message-Digest Algorithm 5)作为一种常用的散列算法,在许多场景下被用来生成固定长度的摘要信息。本文...

    MD5 加密工具源码

    这个工具被设计成一个独立的类,可以方便地对输入数据进行MD5加密,并生成16位的哈希值。默认情况下,该工具会生成大写的哈希字符串,但通过修改源代码,用户也可以配置它生成小写哈希值。 在描述中提到的“VS2005...

    windows下MD5加密工具bat文件

    在批处理文件中,可能使用了Java的命令行工具`javac`来编译源代码,并用`java`命令运行生成的类文件,实现MD5加密功能。用户只需提供待加密的字符串,批处理文件将自动调用Java程序计算MD5值并显示结果。 总的来说...

    MD5工具类 (MD5加密工具类)

    在Java编程中,MD5工具类(如提供的`Md5Util.java`)是用于简化MD5加密过程的实用程序。以下是一些关于MD5工具类的关键知识点: 1. **MD5原理**:MD5算法基于信息摘要理论,它通过特定的数学运算对输入数据进行处理...

    java MD5加密工具类

    以下是一个简单的Java MD5加密工具类示例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { private static final String MD5 = "MD5"; ...

    MD5加密+签名算法Sign生成 工具类

    为了更好地理解和使用这个工具类,你需要了解基本的MD5和签名算法原理,并熟悉如何在代码中调用这些工具类的方法。同时,注意MD5虽然快速但已不再被视为安全的哈希算法,因为它容易产生碰撞,不适合用于存储敏感信息...

    md5加密jar包

    - `MD5Util` 类:自定义的工具类,通常包含静态方法,如`getMD5(String input)`,用于将字符串转换为MD5摘要。 - `FileMD5Util` 类:扩展了MD5Util,提供了读取文件并计算MD5的方法。 用法.txt: 该文本文件通常会...

    MD5校验示例程序

    结合提供的压缩包文件名"MD5",我们可以推测这个压缩包内可能包含了一个C++实现的MD5校验程序,用户可以直接编译运行,体验MD5的加密和校验过程。 总之,MD5是一种强大的哈希函数,在数据安全和完整性验证中发挥着...

    MD5加密校验

    这是一个MD5加密的一个代码类工具,可以对文字,文件,如图片,视频,及其它文件加密。

    MD5编码、MD5加密解密demo

    在描述中提到的"MD5加密解密demo",实际上MD5并不具备可逆的加密特性。MD5是一个单向函数,即给定任意输入,可以很容易地计算出固定的输出(摘要),但无法根据输出反推出原始输入。因此,我们通常不会说"MD5解密",...

    跨平台 AES MD5 ECC DES RSA 加密解密 支持 进度 支持多种编码.源码.FlyUtils_md5加密解密工具类

    本文将详细介绍标题和描述中提到的几种加密算法:AES、MD5、ECC、DES以及RSA,并结合源码库"FlyUtils"探讨它们在跨平台环境下的应用,以及如何支持进度显示和多种编码。 首先,AES(Advanced Encryption Standard)...

    MD5 校验 对比 加密

    在实际应用中,如果你需要进行MD5校验和对比,可以使用各种工具,例如命令行工具`md5sum`(在Unix/Linux系统中)或者Windows自带的“证书管理”工具。对于编程,很多编程语言都有内置的库函数支持MD5计算,如Python...

    Delphi实现MD5加密

    6. **测试与验证**:为了确保MD5实现的正确性,可以使用已知的MD5测试用例进行校验,或者将计算结果与在线MD5加密工具的输出进行对比。 通过理解以上知识点,你可以使用Delphi轻松实现MD5加密功能。在实际项目中,...

Global site tag (gtag.js) - Google Analytics