SpringBoot 文件上传 基于MD5 文件内容校验工具类分析

无情 阅读:182 2021-03-31 16:59:39 评论:0

1、业务场景:实现文件上传功能时。我们需要校验上传文件在传输过程中是否被注入脚本或者是被修改,所有采用md5 算法+ 文件内容生成一个识别码,传递给后端,让后端判断文件是否发生修改或变更。

import java.io.File; 
import java.io.IOException; 
import java.io.InputStream; 
import java.nio.file.Files; 
import java.nio.file.StandardOpenOption; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
 
/** 
 * 上传文件校验工具类 
 * @author zzg 
 * 
 */ 
public class UploadFileUtil { 
	// 密码提花 
	private static final char[] hexCode = "0123456789ABCDEF".toCharArray(); 
	 
	// 文件类取MD5 
    public static String calcMD5(File file){ 
        try (InputStream stream = Files.newInputStream(file.toPath(), StandardOpenOption.READ)) { 
            return calcMD5(stream); 
        }catch (IOException e) { 
            e.printStackTrace(); 
            return ""; 
        } 
    } 
    // 输入流取MD5 
    public static String calcMD5(InputStream stream) { 
        try { 
            MessageDigest digest = MessageDigest.getInstance("MD5"); 
            byte[] buf = new byte[8192]; 
            int len; 
            while ((len = stream.read(buf)) > 0) { 
                digest.update(buf, 0, len); 
            } 
            return toHexString(digest.digest()); 
        } catch (IOException e) { 
            e.printStackTrace(); 
            return ""; 
        } catch (NoSuchAlgorithmException e) { 
            e.printStackTrace(); 
            return ""; 
        } 
    } 
 
    public static String toHexString(byte[] data) { 
        StringBuilder r = new StringBuilder(data.length * 2); 
        for (byte b : data) { 
            r.append(hexCode[(b >> 4) & 0xF]); 
            r.append(hexCode[(b & 0xF)]); 
        } 
        return r.toString(); 
    } 
	 
}

 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
关注我们

一个IT知识分享的公众号