news 2026/6/11 0:41:30

设计简单的Java版本控制台数字摘要工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
设计简单的Java版本控制台数字摘要工具

一、运行效果

主要可执行文件是digest-1.0.jar文件。

1、主要命令参数

2、校验文件h.txt,采用sha-256算法,结果如下:

二、主要源代码

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * @author * @version 1.0.0 * <p> * date: 2025/10/16 **/ public class DigestUtil { /** * 计算摘要 * * @param src 源文件路径 * @param algorithm 摘要算法 */ public static String doDigest(String src, String algorithm) { MessageDigest digest = null; FileInputStream finput = null; try { finput = new FileInputStream(src); digest = MessageDigest.getInstance(algorithm); int result = 0; byte[] buff = new byte[2048]; while (true) { result = finput.read(buff, 0, buff.length); if (result < 0) { break; } digest.update(buff, 0, result); } return byteArrayToHex(digest.digest()); } catch (NoSuchAlgorithmException | FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (finput != null){ try { finput.close(); } catch (IOException e) { e.printStackTrace(); } } } return ""; } /** * 将字节数组的内容,转换返回十六进制字符串 * * @param arr * @return */ public static String byteArrayToHex(byte[] arr) { // 存放十六进制数的表示符号 char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; // 存放结果字符的字符数组,大小是字节数组长度的两倍,因为一个字节表示成两个十六进制字符。 char[] result = new char[arr.length * 2]; // 数组索引变量 int index = 0; // 中间变量 byte b; // 遍历字节数组 for (int i = 0; i < arr.length; i++) { // 获得某个字节 b = arr[i]; // 通过计算,获得索引,取出高4位比特代表的十六进制字符 // 右移四位,把高四位移到了低四位,同时低四位丢弃,原来的高四位被0填充。 // 进行位与运算,得到低四位的整数值 result[index] = hexDigits[(b >>> 4) & 0xF]; // 加一,移到下个位置 index++; // 获得这个字节的低4位代表的十六进制字符。 result[index] = hexDigits[b & 0xF]; // 加一,移动到下个位置 index++; } // 转成字符串返回 return new String(result); } private static void printHelp(){ System.out.println("用法: java -jar ./digest.jar 选项"); System.out.println("选项:"); System.out.println(" -f 被校验文件路径"); System.out.println(" -m 算法 # 支持的算法: MD5 SHA-1 SHA-256 SHA-384 SHA-512"); System.out.println(" -h # 打印帮助"); System.out.println(""); System.out.println("案例:"); System.out.println(" java -jar ./digest.jar -f ./m.txt -m sha-1"); System.out.println(""); } public static void main(String[] args) { String path = ""; String alg = "SHA-1"; boolean isOk = true; if (args.length > 0){ String choice = ""; for (int k = 0; k < args.length; k++) { choice = args[k]; if (choice.equals("-f")){ if (k + 1 < args.length){ k++; path = args[k]; } else { System.out.println("选项-f后需要接文件路径。"); isOk = false; break; } } else if (choice.equals("-m")){ if (k + 1 < args.length){ k++; alg = args[k]; } else { System.out.println("选项-m后需要接算法名字。"); isOk = false; break; } } else if (choice.equals("-h")){ printHelp(); isOk = false; break; } else { System.out.println("不认识选项:\"" + args[0] + "\""); printHelp(); isOk = false; break; } } // 如果参数设置合格 if (isOk){ String digest = doDigest(path, alg); System.out.println("----------------- 哈希校验结果 --------------"); System.out.println(" 文件:" + path); System.out.println(" 算法:" + alg); System.out.println(" 摘要值(大写):" + digest); System.out.println(" 摘要值(小写):" + digest.toLowerCase()); System.out.println("-------------------------------------------"); } } else { System.out.println("请指定文件路径。\n"); printHelp(); } } }

编译和打包命令如下:

javac -encoding UTF-8 DigestUtil.java
jar cvef DigestUtil ./digest-1.0.jar ./DigestUtil.class

三、总结

1、基本能用。

2、简单小巧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:42:15

在 Cloud SQL for PostgreSQL 上启用 pgvector

本文档记录了如何在 Google Cloud SQL (PostgreSQL 13) 实例上启用 pgvector 扩展&#xff0c;以支持向量数据库功能&#xff08;如向量存储和相似度搜索&#xff09;。 1. 简介 pgvector 是 PostgreSQL 的一个开源扩展&#xff0c;用于存储和查询向量嵌入&#xff08;Vector E…

作者头像 李华
网站建设 2026/6/10 12:34:53

Cordova与OpenHarmony营养管理系统

欢迎大家加入开源鸿蒙跨平台开发者社区&#xff0c;一起共建开源鸿蒙跨平台生态。 营养管理的重要性 营养管理是健康运动的重要组成部分。通过Cordova框架与OpenHarmony的数据管理能力&#xff0c;我们可以构建一个完整的营养管理系统。本文将介绍如何实现这一功能。 食物数据…

作者头像 李华
网站建设 2026/6/10 12:37:35

letcode数据库题联系

书籍表 Books&#xff1a; ----------------------- | Column Name | Type | ----------------------- | book_id | int | | name | varchar | | available_from | date | ----------------------- book_id 是这个表的主键&#xff08;具有唯一值…

作者头像 李华
网站建设 2026/6/10 22:45:55

Python 3 文件操作详解

Python 3 文件操作详解 引言 Python 3 作为一种强大的编程语言,在文件操作方面提供了丰富的功能。无论是读取、写入还是修改文件,Python 都能轻松应对。本文将详细介绍 Python 3 中文件操作的相关知识,包括文件打开、读取、写入、关闭等基本操作,以及文件路径处理、文件权…

作者头像 李华