zoukankan      html  css  js  c++  java
  • 《java入门第一季》之对文件和字符串进行MD5加密工具类

    上一篇介绍了MD5加密算法,之前写的代码有些冗余,而且可读性很差。今天把对文本数据的加密,以及获取文件的md5值做一个封装类。代码如下:

    package com.itydl.utils;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class Md5Utils {
    	
    	/**
    	 * @param path
    	 *    文件的路径
    	 * @return
    	 *    文件的MD5值
    	 */
    	public static String getFileMD5(String path){
    		StringBuilder mess = new StringBuilder();
    		try {
    			FileInputStream fis = new FileInputStream(new File(path));
    			//获取MD5加密器
    			MessageDigest md = MessageDigest.getInstance("MD5");
    			byte[] buffer = new byte[10240];
    			int len = fis.read(buffer);
    			while (len != -1) {
    				md.update(buffer, 0, len);
    				//继续读取
    				len = fis.read(buffer);
    			}
    			//读完文件,获取文件的md5值,完成获取MD5值。获取的值存储在返回的数组中
    			byte[] digest = md.digest();
    			for (byte b : digest){
    				//把每个字节转成16进制数  
    				int d = b & 0xff;// 0x000000ff
    				String hexString = Integer.toHexString(d);
    				if (hexString.length() == 1) {//字节的高4位为0
    					hexString = "0" + hexString;
    				}
    				hexString = hexString.toUpperCase();
    				mess.append(hexString);//把每个字节对应的2位十六进制数当成字符串拼接一起
    				
    			}
    		} catch (NoSuchAlgorithmException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return mess + "";
    	}
    	public static String md5(String str){
    		StringBuilder mess = new StringBuilder();
    		try {
    			//获取MD5加密器
    			MessageDigest md = MessageDigest.getInstance("MD5");
    			byte[] bytes = str.getBytes();
    			byte[] digest = md.digest(bytes);
    			
    			for (byte b : digest){
    				//把每个字节转成16进制数  
    				int d = b & 0xff;// 0x000000ff
    				String hexString = Integer.toHexString(d);
    				if (hexString.length() == 1) {//字节的高4位为0
    					hexString = "0" + hexString;
    				}
    				mess.append(hexString);//把每个字节对应的2位十六进制数当成字符串拼接一起
    				
    			}
    		} catch (NoSuchAlgorithmException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return mess + "";
    	}
    }
    


  • 相关阅读:
    MySQL5.7的Linux安装shell脚本之二进制安装
    MySQL与Mongo简单的查询 1
    order by 与group by 之间排序问题
    说说左连接出现重复记录的问题
    MySQL5.6的Linux安装shell脚本之二进制安装(一)
    搭建简单FTP服务器以及过程中容易遇到的几个问题(一)
    jqurty
    jquery中的事件与动画
    SQL SERVER数据库设计与现实
    jquery2
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299618.html
Copyright © 2011-2022 走看看