Java获取文件的hash值(SHA256)

这篇具有很好参考价值的文章主要介绍了Java获取文件的hash值(SHA256)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

简介

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

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


简介

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

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

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

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

/**
	 * 计算SHA256哈希值
	 * @param filePath 文件路径
	 * @return 字节数组
	 * @throws IOException IO异常
	 * @throws NoSuchAlgorithmException NoSearch算法异常
	 */
	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 buffer
			while (channel.read(buffer) != -1) {
				buffer.flip();
				digest.update(buffer);
				buffer.clear();
			}
			return digest.digest();
		}
	}

	/**
	 * 将字节数组转换为String类型哈希值
	 * @param bytes 字节数组
	 * @return 哈希值
	 */
	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代码如下:(文件地址自己改一下)

/**
	 * 计算SHA256哈希值
	 * @param filePath 文件路径
	 * @return 字节数组
	 * @throws IOException IO异常
	 * @throws NoSuchAlgorithmException NoSearch算法异常
	 */
	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 buffer
			while (channel.read(buffer) != -1) {
				buffer.flip();
				digest.update(buffer);
				buffer.clear();
			}
			return digest.digest();
		}
	}

	/**
	 * 将字节数组转换为String类型哈希值
	 * @param bytes 字节数组
	 * @return 哈希值
	 */
	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://www.toymoban.com/news/detail-617601.html

到了这里,关于Java获取文件的hash值(SHA256)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#实现SHA256哈希加密算法(含代码实现)

    C#实现SHA256哈希加密算法(含代码实现) 在现代计算机技术中,数据安全是一个非常重要的话题。加密算法就是用来保护数据安全的一种技术。其中,哈希加密算法是一种常用的加密方式。本篇文章将介绍如何使用 C# 编程语言实现 SHA256 哈希加密算法,并附上完整的源码。 SHA

    2024年02月08日
    浏览(62)
  • Windows(Win10)自带的可用于文件校验(Hash校验,SHA256校验,MD5校验等)的命令: CertUtil 和 Get-FileHash

    Windows(Win10)自带的用于文件校验(Hash校验,SHA256校验,MD5校验等)的命令: certutil 可写为 CertUtil Get-FileHash 可写为 get-filehash CertUtil 是命令行的命令 可以在cmd和powershell中运行 Get-FileHash 是powershell的命令 不能在cmd命令行运行 支持的哈希算法 CertUtil 支持的算法 Get-FileHash 支持的算法 用

    2024年02月15日
    浏览(47)
  • Android 获取应用sha1和sha256

    在 Android 应用开发中,SHA-1(Secure Hash Algorithm 1)值是一种哈希算法,常用于生成应用的数字签名。这个数字签名用于验证应用的身份,并确保应用在发布到设备上时没有被篡改。 以下是生成 Android 应用的 SHA-1 值的步骤: 生成密钥库(KeyStore): 首先,你需要创建一个密钥库

    2024年02月07日
    浏览(41)
  • 如何获取SHA256证书指纹

    打开dos窗口。cmd  找到keytool命令,jdk的bin目录下。如果已经配置了环境变量则可以直接用  输入keytool查看是否识别命令 输入命令,查看SHA256证书指纹(由于我的文件直接在d盘根目录。我先d: 切到d盘的。) keytool -list -v -keystore lyfjpushdemo.jks 输入密钥则会生成。 (在其它盘可

    2024年02月16日
    浏览(51)
  • 【数据结构与算法】04 哈希表 / 散列表 (哈希函数、哈希冲突、链地址法、开放地址法、SHA256)

    一种很好用,很高效,又一学就会的数据结构,你确定不看看? 莫慌,每个概念都很好理解。 哈希表( Hash Table ),也称为 散列表 ,是一种数据结构, 用于存储键值对(key-value pairs) 。 键值对是一种数据结构,用于将键(key)与对应的值(value)相关联。在键值对中,键

    2024年02月09日
    浏览(61)
  • Java工具集 Hex、Hmac算法(MD5、SHA1、SHA256、SHA384、SHA512)、雪花算法SnowflakeId、redis基于Springboot工具类

    🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 专栏 描述 Java项目实战 介绍Java组件安装、使用;手写框架等 Aws服务器实战 Aws Linux服务器上操作nginx、git、JDK、Vue Jav

    2024年04月09日
    浏览(54)
  • Android 应用签名证书的SHA1、MD5、SHA256值在哪获取?

    SHA1值分为发布版和调试版。MD5、SHA256与SHA1的获取是一样的。 调试版就是我们平时开发测试时用的默认签名文件。这个默认的签名文件一般是在c盘的用户名目录下的.android文件夹内。 默认文件就是  debug.keystore 获取调试版的SHA1值 : 回车后即可看到调试版的SHA1值了。

    2024年02月12日
    浏览(52)
  • uniapp安卓签名证书生成,签名证书的SHA1,SHA256,MD5获取

    uniapp安卓证书生成有两种方式,一种是去dcloud开发者中心生成证书,另一种是安装jre环境,自己生成证书 第一种 dcloud生成证书 去该项目对应的应用处,生成证书需要等几分钟,生成后可以查看证书信息 第二种 自己生成 先安装jre,再配置一下环境变量 jre8下载地址 去D盘添加

    2024年02月16日
    浏览(55)
  • Android studio获取证书的MD5/SHA1/SHA-256以及公钥的方法

    Android studio 获取MD5 SHA1 SHA-256 值命令:./gradlew signingReport Android studio 获取公钥:keytool -export -alias key0 -keystore key.keystore -file zhengshu.cer 一、获取MD5 SHA1 SHA-256 值 在Android项目中执行命令:./gradlew signingReport 然后以上操作执行完成之后,搜索你的证书名称,找到以下数据: 二、获

    2024年02月03日
    浏览(62)
  • js流式计算大文件sha256

    超大文件的sha256,不能直接用上面方法sha256(file),这会让用户等待非常久,所以需要流式计算, 原理大概就是把file切割成一小块,比如10M为一个单位来分批次计算,最后在整合成一个完整的sha256 ,示例 代码 如下:

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包