从命令行计算文件的校验和

问题描述 投票:2回答:3

寻找在Linux发行版上可用的命令或命令集,这些命令或命令集将允许我创建脚本以生成文件的校验和。

这个校验和是由一个构建系统生成的,我无法通过对文件中的每个字节求和,然后将该数字截断为4个字节来控制。

我知道如何使用node.js,perl,python,C / C ++等工具来做这件事,但是我需要能够在远程运行的无法修改的裸机Linux发行版上执行此操作(它是在一个PLC)。

有任何想法吗?我一直在寻找一段时间,并没有找到任何看起来很简单的东西。

linux shell scripting checksum
3个回答
2
投票

逐字节求和的解决方案,使用许多原始shell命令将该数字截断为4个字节。

#! /usr/bin/env bash

declare -a bytes
bytes=(`xxd -p -c 1 INPUT_FILE | tr '\n' ' '`)

total=0;
for(( i=0; i<${#bytes[@]}; i++));
do
    total=$(($total + 0x${bytes[i]}))
    if [ $total > 4294967295 ]; then
            total=$(($total & 4294967295))
    fi
done

echo "Checksum: " $total

0
投票

如果您只想逐字节求和并将该数字截断为4个字节,则可以使用以下命令。

xxd -p -c 1 <Input file> | awk '{s+=$1; if(s > 4294967295) s = and(4294967295, s) } END {print s}'

xxd命令用于提取输入文件的hexdump,并添加每个字节以计算总和。如果总和超过2^32-1 = 4294967295值,则执行按位和操作以截断位。


-1
投票

你尝试过cksum吗?我在几个脚本中使用它。它使用起来非常简单。

http://linux.die.net/man/1/cksum

© www.soinside.com 2019 - 2024. All rights reserved.