支持第三方验证的大音频文件分块哈希Bash脚本问询
没问题,我来帮你写一个符合需求的Bash脚本,同时拆解清楚每个步骤的逻辑,让你能轻松理解和调整。
解决方案概述
你的核心需求是在创建当日预先生成分块哈希用于后续验证,同时能灵活提供特定片段,这个思路完全可行。我们会用ffmpeg高效分割音频,用SHA-256哈希确保分块完整性,最后生成可公开发布的哈希清单。
完整Bash脚本
#!/bin/bash # -------------------------- 配置参数 -------------------------- INPUT_FILE="foo.mp3" # 你的原始音频文件 SEGMENT_DURATION=60 # 每个分块的时长(秒),可按需调整,比如30=30秒 SEGMENT_DIR="foo_segments" # 存放分块的目录名 HASH_FILE="${INPUT_FILE%.mp3}_hashes.sha256" # 保存哈希值的文件 # ------------------------------------------------------------- # 检查依赖是否安装 check_dependency() { if ! command -v "$1" &> /dev/null; then echo "错误: 需要安装 $1 才能运行脚本" exit 1 fi } check_dependency ffmpeg check_dependency sha256sum # 创建分块目录,避免文件混乱 mkdir -p "$SEGMENT_DIR" # 用ffmpeg分割音频(无损复制编码,速度极快) echo "正在分割音频文件 $INPUT_FILE..." ffmpeg -i "$INPUT_FILE" \ -f segment \ -segment_time "$SEGMENT_DURATION" \ -c copy \ -reset_timestamps 1 \ "$SEGMENT_DIR/${INPUT_FILE%.mp3}_%04d.mp3" if [ $? -ne 0 ]; then echo "音频分割失败,请检查ffmpeg命令是否正确" exit 1 fi # 生成分块的哈希清单 echo "正在计算分块哈希值..." > "$HASH_FILE" # 清空或创建哈希文件 for segment in "$SEGMENT_DIR"/*.mp3; do # 计算SHA-256哈希,只保留哈希值和文件名(去掉路径,方便第三方验证) sha256sum "$segment" | awk '{print $1 " " substr($2, index($2, "/")+1)}' >> "$HASH_FILE" done echo "操作完成!" echo "分块文件存放在: $SEGMENT_DIR" echo "哈希清单文件: $HASH_FILE"
脚本使用说明
- 安装依赖:确保你的系统已经安装了
ffmpeg(用于音频分割)和sha256sum(通常属于coreutils包,大多数Linux发行版默认自带)。比如在Ubuntu上可以用sudo apt install ffmpeg coreutils安装。 - 调整参数:根据你的需求修改脚本开头的配置参数,比如把分块时长改成30秒,适合更精细的片段提取。
- 运行脚本:给脚本添加执行权限(
chmod +x split_and_hash.sh),然后运行./split_and_hash.sh即可。
后续验证流程
- 发布哈希清单:把生成的
foo_hashes.sha256文件发布到公开可访问且能记录发布时间的平台(比如GitHub Gist、IPFS、或者你的个人网站)。这个发布时间就是你后续用来证明原音频创建日期的关键凭证。 - 提供特定片段:当需要给第三方P提供某个片段时,找到对应的分块文件(比如
foo_0015.mp3对应第15个分块,若分块时长为60秒,就是第15分钟的内容),直接发送给P。 - 验证完整性和日期:
- P可以用
sha256sum -c foo_hashes.sha256命令验证收到的分块是否和你发布的哈希值匹配,确认片段未被篡改。 - 通过哈希清单的发布时间(比如GitHub Gist的提交时间、IPFS的区块时间),可以证明原音频在该时间点已经存在(因为分块是从原音频分割而来,哈希值在创建当日生成并发布)。
- P可以用
注意事项
- 用
-c copy参数分割音频是无损且快速的,但要求原音频的编码格式支持分段(MP3完全支持)。如果遇到分割问题,可以去掉-c copy,让ffmpeg重新编码,但会耗时更长。 - 分块命名用
%04d是为了保证文件名有序(比如0001、0002...),方便后续快速定位特定时间段的片段。
内容的提问来源于stack exchange,提问作者dishclosure
相关产品推荐
相关产品推荐

