`
mzh_2008beijing
  • 浏览: 230373 次
  • 性别: 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"));
    }
}
分享到:
评论

相关推荐

    MD5加密工具类

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

    MD5加密校验

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

    简单的JAVA-MD5工具类

    Java编写的简单MD5工具类,用于登录校验、注册等功能模块中。

    java实现Md5加盐加密算法

    对接接口时用到的一种常用加密算法,常用于验证签名,使用shiro-all-1.4.1.jar,可自行下载

    java接口 参数MD5加密.zip

    备用接口加密。 包含md5加密工具类,参数校验工具类,返回错误码枚举类,演示接口。

    MD5工具类,功能齐全

    字串加密,文件加密,加密串校验,byte[]加密,制定数组中长度加密

    Java常用工具类大全,工作5年精心整理(最新版)

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    java各种工具类,多年精华

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    Java常用工具类大全

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    Java常用工具类大全.7z

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    java基础类库开发包,工作5年精心整理_Java常用工具类源码

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    Md5Util.java

    最简单的MD5加密的工具类,增加用户,登录校验用户的时候,通过此类转化用户的登录密码与数据库的用户信息进行比对

    java 建行支付 Mac值生成 工具类 PayMd5.java

    本工具类可用于对接支付时生成加密数据字段,方便同学们尽快完成任务。博主主要是用这个工具类生成的mac值用于对接建行支付

    java常用工具大全

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    完全掌握加密解密实战超级手册.z01

    全书共分为14章,包括:加密解密技术基础、常用代码分析工具、不同的加密解密算法、静态分析解密工具、动态调试解密工具、辅助工具、壳的不同应用技术、为程序打上补丁、网络验证技术、常用加密工具、不同的注册保护...

    Java加密与解密的艺术配书源代码

    可以攻玉109 4.1 加固你的系统109 4.2 加密组件Bouncy Castle 111 4.3 辅助工具Commons Codec 120 4.4 小结121 第二部分实践篇 第5章电子邮件传输算法—Base64 134 5.1 Base64算法的由来134 5.2 Base64算法的定义134...

    完全掌握加密解密实战超级手册.zip02

    191.5 试用期限制功能 211.5.1 试用次数限制功能 211.5.2 试用天数限制功能 251.5.3 试用日期限制功能 311.5.4 执行时间限制功能 361.5.5 NAG窗口提示限制 371.6 专家点拨:常见问题解答 42第2章 常用代码分析工具 ...

    Java加密与解密的艺术

    可以攻玉1094.1 加固你的系统1094.2 加密组件Bouncy Castle 1114.3 辅助工具Commons Codec 1204.4 小结121第二部分实践篇第5章电子邮件传输算法—Base64 1345.1 Base64算法的由来1345.2 Base64算法的定义1345.3 Base...

    老九工具资源库之网络处理工具

    以库函数的形式提供的网络编程资源,包括常见的如base64编码,pop3编码、smtp编码、md5加密、crc校验码、拨号服务、网络数据包构造与分析等网络相关的编程资源。 1.16.8.1115新增加了GUID/UUID、ICMP协议编程的支持...

Global site tag (gtag.js) - Google Analytics