我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java获取文件的hash值(SHA256)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java获取文件的hash值(SHA256)

目录

简介

获取网络文件的sha256值(方式一)

获取本地文件的sha256值(方式二)


简介

        在工作开发当中需求要通过文件的hash值比对文件是否被篡改过,于是通过使用了(sha256)hash值进行比对,因为对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,通常用一个长度为64的十六进制字符串来表示。

获取网络文件的sha256值(方式一)

        首先通过InputStream获取网络URL文件,然后创建临时文件,再通过FileInputStream以字节流的方式逐块读取文件内容,然后通过DigestInputStream将读取的数据传递给MessageDigest来计算SHA256哈希值。这样可以避免将整个文件加载到内存中,而是通过缓冲区逐块处理文件内容。

JAVA代码如下:(文件地址自己改一下)

public static byte[] calculateSHA256(String filePath) throws IOException, NoSuchAlgorithmException {MessageDigest digest = MessageDigest.getInstance("SHA-256");//获取网络URL文件InputStream fis2 = new URL(filePath).openStream();//创建临时文件File file = File.createTempFile(IdWorker.getIdStr(),"");FileUtil.writeFromStream(fis2,file);try (FileInputStream fis = new FileInputStream(file);FileChannel channel = fis.getChannel();DigestInputStream dis = new DigestInputStream(fis, digest)) {ByteBuffer buffer = ByteBuffer.allocate(8192); // 8 KB bufferwhile (channel.read(buffer) != -1) {buffer.flip();digest.update(buffer);buffer.clear();}return digest.digest();}}private static String bytesToHex(byte[] bytes) {StringBuilder result = new StringBuilder();for (byte b : bytes) {result.append(String.format("%02x", b));}return result.toString();}public static void main(String[] args) {String filePath = "https://xxxxx/20230410/bfd71f584d9645b0a5e3d7a465119f0c.pdf";try {byte[] sha256 = calculateSHA256(filePath);String sha256Hex = bytesToHex(sha256);System.out.println("SHA256: " + sha256Hex);} catch (IOException | NoSuchAlgorithmException e) {e.printStackTrace();}}

响应结果:(这里的结果是我自己再测试的时候生成的)

SHA256: cffebd06c485d17b8a93308e1e39cc4c1636444b762c9c153ba8b29022392b98

获取本地文件的sha256值(方式二)

        通过FileInputStream以字节流的方式逐块读取文件内容,然后通过DigestInputStream将读取的数据传递给MessageDigest来计算SHA256哈希值。这样可以避免将整个文件加载到内存中,而是通过缓冲区逐块处理文件内容。

JAVA代码如下:(文件地址自己改一下)

public static byte[] calculateSHA256(String filePath) throws IOException, NoSuchAlgorithmException {MessageDigest digest = MessageDigest.getInstance("SHA-256");try (FileInputStream fis = new FileInputStream(filePath);FileChannel channel = fis.getChannel();DigestInputStream dis = new DigestInputStream(fis, digest)) {ByteBuffer buffer = ByteBuffer.allocate(8192); // 8 KB bufferwhile (channel.read(buffer) != -1) {buffer.flip();digest.update(buffer);buffer.clear();}return digest.digest();}}private static String bytesToHex(byte[] bytes) {StringBuilder result = new StringBuilder();for (byte b : bytes) {result.append(String.format("%02x", b));}return result.toString();}public static void main(String[] args) {String filePath = "D:\\bfd71f584d9645b0a5e3d7a465119f0c.pdf";try {byte[] sha256 = calculateSHA256(filePath);String sha256Hex = bytesToHex(sha256);System.out.println("SHA256: " + sha256Hex);} catch (IOException | NoSuchAlgorithmException e) {e.printStackTrace();}}

响应结果:(这里的结果是我自己再测试的时候生成的)

SHA256: cffebd06c485d17b8a93308e1e39cc4c1636444b762c9c153ba8b29022392b98

作者:筱白爱学习!!

欢迎关注转发评论点赞沟通,您的支持是筱白的动力!

来源地址:https://blog.csdn.net/weixin_43552143/article/details/131397194

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java获取文件的hash值(SHA256)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python实现通过文件路径获取文件hash值的方法

本文实例讲述了Python实现通过文件路径获取文件hash值的方法。分享给大家供大家参考,具体如下:import hashlib import os,sys def CalcSha1(filepath):with open(filepath
2022-06-04

redis怎么获取hash的值

要获取Redis中hash的值,可以使用HGET命令,语法如下:HGET key field其中,key为hash的键,field为要获取的字段名。例如,获取名为user的hash中字段name的值:HGET user name如
redis怎么获取hash的值
2024-04-09

如何在Java取Redis的hash值

本文介绍如何在Java中获取Redis中哈希值,提供四种方法:HGET、HMGET、HVALS和HGETALL。使用Jedis客户端库,开发者可以轻松检索哈希中特定字段的值、多个字段的值、所有字段的值以及所有字段和值对。文中还提供了附加提示,包括键值类型、命名空间、错误处理和连接池。
如何在Java取Redis的hash值
2024-04-02

JAVA中获取文件MD5值的方法有哪些

在Java中,获取文件的MD5值的方法主要有以下几种:1. 使用java.security.MessageDigest类:可以使用MessageDigest类提供的getInstance("MD5")方法获取MD5算法的实例,然后通过upd
2023-08-11

详解JAVA中获取文件MD5值的四种方法

在Java中,可以使用以下四种方法来获取文件的MD5值:1. 使用java.security.MessageDigest类:可以使用该类的getInstance方法来获取MD5算法的实例,并使用update方法来更新消息摘要。最后,可以使用
2023-08-11

VBS如何获取文件MD5值

这篇文章主要讲解了“VBS如何获取文件MD5值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VBS如何获取文件MD5值”吧!下面这个代码不需要组件一样可以获取MD5值。复制代码 代码如下:O
2023-06-08

java怎么获取文件流的文件名

在Java中,可以通过File类的getName()方法来获取文件流的文件名。例如:import java.io.File;public class Main {public static void main(String[] args)
java怎么获取文件流的文件名
2024-02-29

java如何获取map的值

在Java中,可以使用`get()`方法从`Map`对象中获取键对应的值。具体语法如下:```javaMap map = new HashMap();// 添加键值对map.put(key1, value1);map.put(key2, v
2023-09-11

java怎么获取properties的值

在Java中获取properties的值,可以通过使用`java.util.Properties`类来读取和操作properties文件。以下是获取properties值的示例代码:1. 使用`java.util.Properties`类加
2023-08-18

java如何获取resources下的文件

在Java中,可以使用`ClassLoader`类来获取`resources`下的文件。具体步骤如下:1. 创建`ClassLoader`对象```ClassLoader classLoader = getClass().getClassL
2023-09-28

怎么用c语言获取文件MD5的值

要使用C语言获取文件的MD5值,您可以使用以下步骤:1. 包含必要的头文件:```c#include #include #include #include ```2. 定义一个函数来计算文件的MD5值:```cvoid compute_md
2023-08-15

用c 获取文件MD5值的实现方法

要使用C语言获取文件的MD5值,可以使用开源的MD5库,比如md5deep、OpenSSL或者GNU md5sum等。这里以OpenSSL库为例,以下是一个简单的示例代码:```c#include #include #define MAX_
2023-08-15

java如何获取文件路径

第一种:File f = new File(this.getClass().getResource("/").getPath());System.out.println(f);结果: C:Documents%20and%20SettingsAdministra
java如何获取文件路径
2022-04-18

java怎么获取文件大小

目前Java获取文件大小的方法有两种:1、通过file的length()方法获取;2、通过流式方法获取;通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()方法和新的java..nio.*中的FileCha
java怎么获取文件大小
2016-09-27

java如何获取注解的值

在Java中,可以通过反射来获取注解的值。具体步骤如下:首先,需要定义一个带有注解的类或方法。@MyAnnotation(name = "example", value = "Hello World")public class MyCla
2023-10-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录