Titan笔记

  • 首页
  • Java
  • 数据结构
  • C语言
  • Web
  • 杂谈
  • 移动开发
  • 逸笔挥墨
Titan笔记
分享学习,研究与开发的点滴记忆
  1. 首页
  2. Java
  3. 正文

Java获取文件MD5的方式

2020年4月22日 1316点热度 32人点赞 0条评论

MD5是一种常用的散列算法,它可以将任意长度的输入数据映射为一个128位的输出,这个输出就是一个固定长度的数字,通常用来校验数据的完整性,它的特点是不可逆,即无法从散列值反推出原来的数据。

相关思路

用JDK中自带的Security包中的MessageDigest类可以实现MD5算法。所以基本的实现流程是 选择文件 -> 读取二进制流 -> MD5信息摘要 -> 转换为String返回输出。

代码

Main.java

import java.io.File;
import java.util.Scanner;

/*
A tool to get the MD5 of a File.
Author: Titan
 */
public class Main {

    public static void main(String[] args) {
        File file = null;
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please input the file name.");
        String fileName = scanner.nextLine();
        file = new File(fileName);
        // Jude if the file is exist
        if (!file.isFile()) {
            System.out.println("File Not Found!");
            System.exit(-1);
        }
        // Handle the MD5 Operation
        Handler handler = new Handler(file);
        // Get MD5
        String md5Text = handler.getMD5();
        if (md5Text != null) {
            System.out.println("Get the MD5 Successfully");
            System.out.println("File Name: " + fileName);
            System.out.println("MD5 Text: " + md5Text);
        } else {
            System.out.println("Get MD5 Failed. ");
        }
    }
}

Handler.java

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Handler {
    private final byte[] buffer = new byte[1024];
    private MessageDigest md5 = null;
    private File file = null;

    public Handler(File file) {
        if (!file.isFile()) {
            System.out.println("File not found!");
        }
        try {
            this.md5 = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            System.out.println("MD5 Method Error!");
        }
        this.file = file;
    }

    public String getMD5() {
        int length = 0;
        try (FileInputStream inputStream = new FileInputStream(file)) {
            while ((length = inputStream.read(buffer)) != -1) {
                md5.update(buffer, 0, length);
            }
            return new BigInteger(1, md5.digest()).toString(16);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

 

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: Java MD5 加密算法
最后更新:2022年12月9日

Titan

不为岁月流逝蹉跎,不为潮流的势头去附和

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
最新 热点 随机
最新 热点 随机
Docker配置IPv6容器网络支持 什么是Elastic Stack,ELK的发展历程 K8s中Pod的基本概念 Pushkin AI - 基于OpenAI-ChatGPT / GPT3的问答机器人 云原生 - 浅谈容器基础与K8S架构设计 腾讯Serverless体验,使用TypeScript编写并部署云函数
Docker配置IPv6容器网络支持
腾讯Serverless体验,使用TypeScript编写并部署云函数 云原生 - 浅谈容器基础与K8S架构设计 [数据结构]结构体练习之复数运算 Java 开发环境与IDE 配置与安装教程 [数据结构] 稀疏矩阵的存储 Spring Cloud 微服务学习笔记 - 开篇
分类
  • Android
  • C语言
  • Elasticsearch
  • Hadoop
  • Hive
  • Java
  • JavaWeb
  • Kubernetes
  • Linux运维之道
  • Mybatis学习笔记
  • Python
  • SpringCloud
  • Web
  • Web前端
  • Web后端
  • 云原生
  • 并发编程
  • 开发工具
  • 数据库
  • 数据结构
  • 杂谈
  • 移动开发
  • 移动测试
  • 诗词歌赋
  • 软件测试
  • 逸笔挥墨
  • 随摘
标签聚合
二叉树 链式存储 Mybatis学习笔记 Java JavaWeb 数据结构 Apache-Hive Python

COPYRIGHT © 2013-2021 Titan. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备20001822号-1

豫公网安备 41010502004418号