使用 Java 获取图片的 MD5 编码
在许多应用场景中,我们需要验证文件的完整性或唯一性,常用的方法是计算文件的哈希值。MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,可以生成一个128位的哈希值(32位的十六进制数字),用于检查文件的完整性。在本文中,我们将展示如何使用 Java 计算图片文件的 MD5 编码。
什么是 MD5?
MD5 是一种加密哈希函数,用于生成文件或字符串的唯一哈希值。虽然由于碰撞问题,MD5 不再推荐用于安全相关的应用,但它仍然适用于校验文件完整性等用途。
使用 Java 计算 MD5 编码
Java 标准库中包含了 MessageDigest 类,可以用来计算文件的 MD5 值。为了简化这个过程,我们还可以使用 Apache Commons Codec 库。下面我们将展示如何使用这两种方法来计算图片文件的 MD5 编码。
使用 Java 原生方法
首先,我们来看如何使用 Java 自带的 MessageDigest 类来计算 MD5 编码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class MD5Checksum {public static String getMD5(File file) {try (FileInputStream fis = new FileInputStream(file)) {MessageDigest md = MessageDigest.getInstance("MD5");byte[] byteArray = new byte[1024];int bytesCount = 0;while ((bytesCount = fis.read(byteArray)) != -1) {md.update(byteArray, 0, bytesCount);}byte[] bytes = md.digest();StringBuilder sb = new StringBuilder();for (byte aByte : bytes) {sb.append(String.format("%02x", aByte));}return sb.toString();} catch (NoSuchAlgorithmException | IOException e) {e.printStackTrace();return null;}}public static void main(String[] args) {File file = new File("path/to/your/image.jpg");String md5 = getMD5(file);System.out.println("MD5: " + md5);}
}
解释
- 导入必要的包:我们需要
java.io.File,java.io.FileInputStream,java.security.MessageDigest, 和java.security.NoSuchAlgorithmException这些包来处理文件和计算 MD5。 - 读取文件:使用
FileInputStream读取文件内容。 - 计算 MD5:使用
MessageDigest类的update方法来更新摘要,使用digest方法来计算最终的哈希值。 - 转换为十六进制字符串:将字节数组转换为十六进制字符串以便于阅读。
使用 Apache Commons Codec
为了使代码更简洁,我们可以使用 Apache Commons Codec 库,该库提供了更高层次的 API 来计算哈希值。首先,需要在项目中添加 Apache Commons Codec 库,可以通过 Maven 或直接下载 JAR 文件的方式添加。
Maven 依赖项:
<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.15</version>
</dependency>
接下来,使用 Apache Commons Codec 库来计算文件的 MD5 值:
import org.apache.commons.codec.digest.DigestUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class MD5Checksum {public static String getMD5(File file) {try (FileInputStream fis = new FileInputStream(file)) {return DigestUtils.md5Hex(fis);} catch (IOException e) {e.printStackTrace();return null;}}public static void main(String[] args) {File file = new File("path/to/your/image.jpg");String md5 = getMD5(file);System.out.println("MD5: " + md5);}
}
解释
- 添加依赖:通过 Maven 或手动添加 Apache Commons Codec 库。
- 计算 MD5:使用
DigestUtils.md5Hex方法直接计算文件流的 MD5 编码,简化了代码。
总结
通过这两种方法,我们可以方便地在 Java 中计算图片文件的 MD5 编码。Java 自带的 MessageDigest 类提供了底层的实现,而 Apache Commons Codec 库提供了更高层次的 API,使得代码更加简洁和易读。无论选择哪种方法,都能确保文件流在使用完毕后自动关闭,避免资源泄露。这不仅提高了代码的可靠性,也使代码更符合现代 Java 编程的最佳实践。
相关文章:
使用 Java 获取图片的 MD5 编码
在许多应用场景中,我们需要验证文件的完整性或唯一性,常用的方法是计算文件的哈希值。MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,可以生成一个128位的哈希值(32位的十六进制数字࿰…...
GO——泛型
泛型 对于强类型语言,在编写代码时不事先指定类型,在实例化的时候作为参数指明类型 参考:https://www.liwenzhou.com/posts/Go/generics/ 什么时候使用泛型? 方法中的代码实现与类型T无关参考:https://juejin.cn/p…...
TSP(Python):Qlearning求解旅行商问题TSP(提供Python代码)
一、Qlearning简介 Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获…...
【精通NIO】NIO介绍
一、什么是NIO NIO,全称为New Input/Output,是Java平台中用于替代传统I/O(Blocking I/O)模型的一个功能强大的I/O API。NIO在Java 1.4版本中被引入,其设计目标是提供一种非阻塞的、低延迟的I/O操作方式,以…...
ssh远程管理
一、Openssh概述 Openssh是一种安全通道协议,用来实现字符界面的远程登录、远程复制、远程文本传输。 Openssh对通信双方的数据进行了加密。有两种方式: 用户名和密码登录:比较常用密钥对认证方式:可以实现免密登录 ssh端口&a…...
【ai】pycharm远程ssh开发
方式1: gateway的方式是远程放一个pycharm 专业版,经常下载失败 方式2: 类似vs,源码本地,同步到远程进行运行。 参考大神的分享: Pycharm远程连接服务器(2023-11-9) Pycharm远程连接服务器(windows下远程修改服务器代码)[通俗易懂] cpolar 建议同时内网穿透 选 远程开…...
leetcode 9 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而…...
学习Python的基础知识
目录 摘要 Python 的主要特点 基本语法 1. 变量和数据类型: 2. 条件语句: 3. 循环: 4. 函数: 5. 类和对象: 6. 列表和字典: 7. 文件I/O: Python 的学习路线 如何高效使用 Python 的…...
第五届上海市青少年算法竞赛网络同步赛(小学组)
第五届上海市青少年算法竞赛网络同步赛(小学组)T1. 符号译码_网络同步赛 内存限制: 256 Mb 时间限制: 1000 ms 题目描述 小爱为标点符号设计了一套编码系统,编码规则如下: [ 的编码为 010 ] 的编码为 101 < 的编码为 00 > 编码为 11 + 的编码为 011 - 编码为 100 根…...
【区分vue2和vue3下的element UI Cascader 级联选择器组件,分别详细介绍属性,事件,方法如何使用,并举例】
在Vue 2的Element UI和Vue 3的Element Plus中,el-cascader(级联选择器)组件用于从嵌套的数据中进行选择。以下是对这两个版本下el-cascader组件的属性、事件和方法的详细介绍,并附带示例。 Vue 2的Element UI el-cascader 属性…...
pottery,一个超酷的 Python 库!
更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个超酷的 Python 库 - pottery。 Github地址:https://github.com/brainix/pottery 在分布式系统和高并发环境中,Redis 作为一种高性能的键值存储数据库,被广泛…...
【Android面试八股文】在Java中重载和重写是什么意思,区别是什么?
文章目录 在Java中重载和重写是什么意思,区别是什么?这道题想考察什么 ?考察的知识点考生应该如何回答重载(Overloading)重写(Overriding)重载和重写的区别在Java中重载和重写是什么意思,区别是什么? 这道题想考察什么 ? Java基础 考察的知识点 面向对象多态的基…...
【第二篇】SpringSecurity源码详解
一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为4个,作用分别为 jar作用spring-security-coreSpringSecurity的核心jar包,认证和授权的核心代码都在这里面spring-security-config如果使用Spring Security XML名称空间进行配置或Spring Security的Java configura…...
基于Python+FFMPEG环境下载B站歌曲
题主环境 WSL on Windows10 命令如下 # python3.9 pip install --pre yutto yutto --batch https://www.bilibili.com/video/BV168411o7Bh --audio-only ls | grep aac | xargs -I {} ffmpeg -i {} -acodec libmp3lame {}.mp3WinAmp...
静态 VxLAN 浅析及配置示例(头端复制)
一、概念: VxLAN:Visual eXtensible Local Area Network 虚拟扩展本地局域网,一种隧道技术,能在三层网络的基础上建立二层以太网网络隧道,从而实现跨地域的二层互连,VxLAN端口:4789EVPN&#x…...
2023年与2024年AI代理基础设施的演进:六大关键变化
随着人工智能技术的不断进步,AI代理基础设施在2023年和2024年之间经历了显著的发展和变革。本文将探讨这两年间AI代理基础设施的六大关键变化,展示如何为开发者和用户提供更加强大和集成化的解决方案。 1. 代理特定开发工具的兴起 2024年见证了专为AI代理设计的新一代开发工…...
实验三-8086指令的应用《计算机组成原理》
一、实验目的 掌握8086指令的应用 二、实验原理 三、实验仪器 计算机1台,emu8086软件。 四、实验步骤 1、建立00H~0FH~00H 31个数,00H~0FH数据逐渐增大,0FH~00H逐渐减小,即DI指针所表示的地…...
《维汉翻译通》App全新升级:维吾尔语短文本翻译、汉语拼音标注、维语词典、谚语格言名句等功能统统免费!还支持维吾尔文OCR识别提取文字!
2024年《维汉翻译通》App迎来重大更新!这次升级不仅带来了全新的功能,还为所有用户提供了更加便捷的服务体验。以下是我们新版本的主要亮点: 维语短文本翻译免费啦! 我们深知语言是沟通的桥梁,为了让更多人能够跨越语…...
全年申报!2024年陕西省双软企业认定条件标准、申报好处费用
1.双软企业是什么? 答:双软认证并不是一个资质,而是"软件产品登记"和"软件企业认定"两个不同资质的统称.叫做"双软企业" 2.双软企业的优惠政策是什么? 答:(1)软件产品登记的优惠政策:软件产品增值税,从13%减按3%征收,实行即征即退; (2)软件…...
系统移植 (以将Linux系统移植到S5P6818开发板为例)
(本篇文章以将Linux系统移植到S5P6818开发板为例) 本文章所需要的文件在下面链接获取:https://download.csdn.net/download/a1547998353/89406544 开发环境搭建 1、安装交叉编译工具链 安装步骤: 1. 在ubuntu的家目录(~)下,创建t…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
