news 2026/4/26 15:44:06

设计简单的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/4/26 15:42:47

软件缺少vcomp140.dll文件无法运行问题 下载修复方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/25 23:56:39

微信小程序uniapp-vue校园食堂订餐多商家带配送

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万…

作者头像 李华
网站建设 2026/4/25 23:57:21

JavaScript 变量:let 和 const 该用谁?

JavaScript 变量&#xff1a;let 和 const 该用谁&#xff1f;生活中的例子 01游戏得分&#xff1a;分数会一直变&#xff0c;所以用 let。生活中的例子 02圆周率 (π)&#xff1a;数学常数永远是 3.14...&#xff0c;所以用 const。生活中的例子 03用户的出生年份&#xff1a;…

作者头像 李华
网站建设 2026/4/21 22:19:03

基于GD32的直流无刷电机控制算法实现和验证

目录 1 项目概述 1.1 项目背景 1.2 系统功能介绍 1.3 系统使用的技术要点 2 系统硬件框架结构 2.1 电机PWM接口 2.2 电流采样接口 2.3 编码器接口 3 驱动程序实现 3.1 PWM 功能实现 3.1.1 PWM接口配置 3.1.2 验证PWM输出波形 3.2 AS5600的驱动 3.2.1 AS5600与MCU之…

作者头像 李华
网站建设 2026/4/25 12:35:03

Win10 系统备份与还原实用指南:3 种方法筑牢数据安全防线

在数字化时代&#xff0c;电脑里的系统文件、工作文档、个人资料等都是核心资产&#xff0c;一旦遭遇硬件故障、病毒攻击或误操作&#xff0c;数据丢失可能造成不小损失。Windows 10 自带了实用的备份还原工具&#xff0c;同时也有更高效的第三方方案&#xff0c;下面就为大家精…

作者头像 李华