2

Ubuntu の Web サイトで、このきちんとした小さなスクリプトを見つけました。このスクリプトは、CD の内容を iso(9660) ファイルの MD5 サムと比較して検証します。md5 の合計が計算された後にスクリプトが文字列を解析する理由がわかりません。

CSUM1=$(CHECKSUM "$1" | grep -om1 '^[0-9a-f]*')

スクリプトに渡された cmdline 引数が実際の md5 ハッシュ (大文字と小文字を区別せず、16 進数 (0-9/af)) であることを確認するにはどうすればよいですか。md5 ハッシュを検証する方法を示すいくつかのスニペットがオンラインにあります。.md5 ファイルが引数として渡された場合は MD5 ハッシュを検証して grep したい、そうでない場合はハッシュを検証したい。計算して比較するスクリプトを取得しました...

# Compares the checksums of an iso9660 image and a burned disk.
# This script is released into the public domain by it's author.
if [ -n "$BASH" ]
then
  shopt -s expand_aliases
fi

if [ -n "$CHECKSUM" ]
then
  alias CHECKSUM="$CHECKSUM"
elif which md5deep &> /dev/null
then
  alias CHECKSUM='md5deep -e'
else
  alias CHECKSUM='md5sum'
fi

if [ -n "$2" ]
then
  DISKDEVICE="$2"
else
  DISKDEVICE='/dev/cdrom'
fi

CSUM1=$(CHECKSUM "$1" | grep -om1 '^[0-9a-f]*')
# extract cmdline arg
echo 'checksum for input image:' $CSUM1
SIZE=$(stat -c '%s' "$1")
BLOCKS=$(expr $SIZE / 2048)
CSUM2=$(dd if="$DISKDEVICE" bs=2048 count=$BLOCKS 2>/dev/null | CHECKSUM | grep -om1 '^[0-9a-f]*')
echo 'checksum for output disk:' $CSUM2

if [ "$CSUM1" = "$CSUM2" ]
then
  echo 'verification successful!'
else
  echo 'verification failed!'
fi
4

1 に答える 1

1

md5 の合計が計算された後にスクリプトが文字列を解析する理由がわかりません。 CSUM1=$(CHECKSUM "$1" | grep -om1 '^[0-9a-f]*')

md5sumなどはハッシュを出すだけではないので、それを解析する必要があります

$ md5sum lupu-528.005.iso
8ad170c46b523436776398fa5ce39fa4 *lupu-528.005.iso

スクリプトに渡された cmdline 引数が実際の md5 ハッシュであることを確認するにはどうすればよいですか

そのスクリプトの意図は、ハッシュではなくファイルを渡すことです。

于 2013-02-05T18:24:47.240 に答える