从零做一个文件哈希校验工具:拖入文件秒出 MD5/SHA-256

举报
deli007 发表于 2026/08/11 10:03:26 2026/08/11
【摘要】 不用写一行代码,用华为云码道 TUI 自然语言生成生产级文件哈希校验命令行工具,支持 MD5/SHA-1/SHA-256 批量校验、错误处理与自动测试,几分钟完成交付。

不用写一行代码,让 AI 帮你生成一个生产级的命令行工具 —— 这就是华为云码道(CodeArts)的魔力。

开篇

在日常运维和开发中,我们经常需要校验文件的完整性 —— 下载的文件是否被篡改?传输的文件是否完整?这时候,MD5、SHA-1、SHA-256 等哈希算法就派上了用场。但每次都手动输入命令、格式化输出确实麻烦。有没有办法快速生成一个专业、美观的文件哈希校验工具?

答案就是:华为云码道 TUI(CodeArts Terminal UI)。你只需要用自然语言描述需求,码道就能自动编写代码、创建项目结构、完成测试验证,几分钟内交付一个可用的命令行工具。

码道 TUI 安装与开通

码道 TUI 是华为云推出的 AI 编程助手,内置在 CodeArts IDE 中,支持终端交互模式。

在 Windows 终端中安装码道 CLI 后,执行 codearts 即可进入 TUI 交互界面。

码道能力

码道 TUI 具备以下核心能力:

  • 自然语言编程:用中文或英文描述需求,自动生成完整代码
  • 项目架构设计:自动规划目录结构、模块划分
  • 命令行工具开发:支持 argparse 参数解析、美观的终端输出
  • 测试与验证:自动编写测试、验证功能正确性
  • 文档生成:同步产出 README、requirements.txt 等项目文档

任务描述

本次我们要用码道 TUI 创建一个 文件哈希校验工具(file-hash-checker),需求如下:

  1. 支持命令行调用,接收文件路径作为参数
  2. 支持 MD5、SHA-1、SHA-256 三种哈希算法
  3. 输出美观的带格式结果(表格边框、对齐排版)
  4. 支持批量校验多个文件
  5. 有完善的错误处理,文件不存在时给出友好提示
  6. 生成完整的项目结构,包含 README.md

将以上需求直接输入码道 TUI,它就会自动开始工作。

开发过程

第一步:输入需求

在码道 TUI 中输入自然语言需求,描述你想要创建的工具:

需求输入

码道接收到需求后,会先进行任务规划,自动拆解为多个子任务(创建目录、编写核心模块、实现 CLI、编写文档、测试验证等)。

第二步:码道自动开发

码道开始逐项完成任务。它首先创建项目目录结构,然后编写核心的哈希计算模块,最后实现命令行入口。

码道处理中

整个过程全自动,无需人工干预。码道会自动处理文件写入、模块导入、错误处理等所有细节。

第三步:开发完成

码道完成所有代码编写后,会自动安装项目并运行测试,验证功能是否正常:

码道完成

从输入需求到项目交付,全程耗时不到 3 分钟。

项目代码解析

码道生成的代码结构清晰、注释完善,我们来看核心模块。

哈希计算模块(hasher.py

import hashlib
import os
from dataclasses import dataclass
from enum import Enum
from typing import Optional


class HashAlgorithm(Enum):
    MD5 = "md5"
    SHA1 = "sha1"
    SHA256 = "sha256"


BUFFER_SIZE = 65536


@dataclass
class HashResult:
    file_path: str
    algorithm: HashAlgorithm
    hash_value: Optional[str] = None
    file_size: Optional[int] = None
    error: Optional[str] = None

    @property
    def success(self) -> bool:
        return self.error is None


def compute_hash(file_path: str, algorithm: HashAlgorithm) -> HashResult:
    """计算单个文件的指定哈希值"""
    if not os.path.exists(file_path):
        return HashResult(
            file_path=file_path,
            algorithm=algorithm,
            error=f"文件不存在: {file_path}",
        )

    if not os.path.isfile(file_path):
        return HashResult(
            file_path=file_path,
            algorithm=algorithm,
            error=f"路径不是文件: {file_path}",
        )

    try:
        file_size = os.path.getsize(file_path)
        hasher = hashlib.new(algorithm.value)
        with open(file_path, "rb") as f:
            while True:
                data = f.read(BUFFER_SIZE)
                if not data:
                    break
                hasher.update(data)
        return HashResult(
            file_path=file_path,
            algorithm=algorithm,
            hash_value=hasher.hexdigest(),
            file_size=file_size,
        )
    except PermissionError:
        return HashResult(
            file_path=file_path,
            algorithm=algorithm,
            error=f"权限不足,无法读取: {file_path}",
        )
    except Exception as e:
        return HashResult(
            file_path=file_path,
            algorithm=algorithm,
            error=f"计算哈希时出错: {e}",
        )

亮点:

  • 使用 枚举类 定义支持的算法,类型安全
  • 使用 dataclass 封装计算结果,包含成功/失败状态
  • 分块读取 大文件(64KB 缓冲区),避免内存溢出
  • 完善的异常处理:文件不存在、权限不足、路径错误等场景

命令行入口(cli.py

import argparse
import sys
import time

from file_hash_checker.hasher import (
    ALGORITHM_DISPLAY, HashAlgorithm,
    compute_all_hashes, compute_hash,
)


def format_size(size: int) -> str:
    """格式化文件大小为人类可读形式"""
    for unit in ["B", "KB", "MB", "GB", "TB"]:
        if size < 1024:
            return f"{size:.1f} {unit}" if unit != "B" else f"{size} {unit}"
        size /= 1024
    return f"{size:.1f} PB"


def main() -> None:
    parser = argparse.ArgumentParser(
        prog="file-hash-checker",
        description="文件哈希校验工具 - 支持 MD5、SHA-1、SHA-256",
    )
    parser.add_argument("files", nargs="+", metavar="FILE",
                        help="要计算哈希的文件路径(支持多个文件)")
    parser.add_argument("-a", "--algorithm",
                        choices=["md5", "sha1", "sha256", "all"],
                        default="all",
                        help="哈希算法(默认: all)")
    parser.add_argument("-v", "--version", action="version",
                        version=f"file-hash-checker {__version__}")

    args = parser.parse_args()
    # ... 核心逻辑 ...

亮点:

  • 使用 argparse 构建专业的命令行界面
  • 支持 -a 参数灵活选择算法,-v 查看版本
  • 批量处理 多个文件,逐个输出结果
  • 美观的表格输出 使用 Unicode 边框字符
  • 统计成功/失败数并设置正确的退出码

运行效果

安装完成后,直接使用命令行运行工具:

# 批量校验多个文件
file-hash-checker README.md setup.py

运行效果

工具会输出带有美观边框的格式化结果,包含每个文件的 MD5、SHA-1、SHA-256 值及文件大小。

其他用法:

# 仅计算 MD5
file-hash-checker -a md5 myfile.txt

# 仅计算 SHA-256
file-hash-checker -a sha256 myfile.txt

# 测试错误处理
file-hash-checker not_exist.txt
# 输出: ✗ not_exist.txt — 文件不存在: not_exist.txt

能力总结

通过本次实践,码道 TUI 展现了以下能力:

能力 表现
需求理解 准确理解 6 项需求,自动拆解为 6 个子任务
代码质量 生成的代码结构清晰,使用枚举、dataclass 等 Python 最佳实践
错误处理 覆盖文件不存在、权限不足、路径错误等边界场景
输出美化 使用 Unicode 边框字符实现专业级终端表格输出
项目完整性 包含 README、setup.pyrequirements.txt 等完整项目文件
测试验证 自动执行 3 项功能测试,全部通过

总结

华为云码道 TUI 让命令行工具开发变得前所未有的简单。你只需要用自然语言描述需求,剩下的代码编写、项目构建、测试验证都由 AI 自动完成。无论是运维脚本、数据处理工具还是开发辅助工具,码道都能快速交付生产级的代码。

对于开发者来说,码道不仅是一个提效工具,更是一个优秀的"结对编程伙伴"—— 它生成的代码遵循最佳实践、考虑边界条件、输出美观,值得学习和参考。


立即体验码道https://developer.huaweicloud.com/codeartsco.html?source=dmzntgwsf&sourcead=dmzntgwwbwz

项目地址:本文所述 file-hash-checker 项目由码道自动生成,完整源码可在对应工作区中找到。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。