当前位置: 首页 > news >正文

设计简单的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、简单小巧。

http://www.jsqmd.com/news/140133/

相关文章:

  • 光线折射的代码
  • 谷歌SEO本地排名解密:位置让你入场,但评论决C位
  • 软件缺少vcruntime140.dll文件 无法运行问题 下载修复方法
  • 光驱微米齿轮:激光驱动的超微型马达技术突破
  • 基于SpringBoot的线上兼职招聘信息管理系统毕业设计项目源码
  • 题解:Luogu P11111 [ROI 2023] 生产计划 (Day 2)
  • 微信小程序uniapp-vue校园任务跑腿接单平台
  • 微软全家桶[Office+Project+Visio] - 教程
  • 2025最新!9个AI论文平台测评:研究生写论文痛点全解析
  • 阅读笔记12
  • 新老系统切换方案
  • Cordova与OpenHarmony运动建议引擎
  • 基于SpringBoot的校园传统文化交流系统毕业设计项目源码
  • 企业选择GEO服务商的核心评估标准 - 品牌2025
  • ABC437F
  • 测评5大DeepSeek推广公司,助力企业选对GEO服务商(2026年1月更新) - 品牌2025
  • 无人配送车总遇导航难题,这款组合导航统统帮你解决
  • Gin框架基础篇006_HTML模板加载与渲染
  • Cordova与OpenHarmony营养管理系统
  • 傅立叶变换(一):简介
  • 为什么你的软文没流量?试试这个给新手的“三步定位法”
  • P14080 [GESP202509 八级] 最小生成树
  • 软件工程old friend老友助手小程序开发总结
  • Gin框架基础篇005_静态文件服务
  • 预训练 vs 微调:打造AI学霸的秘密
  • 5大DeepSeek推广公司测评,助力企业选择优质GEO服务商(2026年1月更新) - 品牌2025
  • 大数据与数字孪生:工业系统仿真优化
  • 豆包AI广告公司推荐(2026年) - 品牌2025
  • JavaScript 变量:let 和 const 该用谁?
  • 阅读笔记11