Bir sağlama toplamı oluşturmak için olası komutlar
Ne yazık ki, kriptografik bir sağlama toplamı oluşturmak için standart bir yardımcı program yoktur. CRC oluşturmak için standart bir yardımcı program vardır cksum
:; bu, düşmanca olmayan bir ortamdaki değişiklikleri tespit etmek için yeterli olabilir.
MD5 yerine SHA1 kullanmanızı tavsiye ederim. MD5 yardımcı programı olan ancak SHA1 olmayan birçok sistem yoktur ve şifreleme sağlama toplamları kullanacaksanız, çarpışmaları bulmak için bilinen bir yöntemi olmayan bir algoritma da kullanabilirsiniz (boyutu da kontrol ettiğiniz varsayılarak).
Standart fakat yaygın olmayan ve özet hesaplayabilen bir araç OpenSSL'dir . Cygwin, Debian ve OSX için kullanılabilir, ancak maalesef OSX'teki varsayılan kurulumun bir parçası değildir.
openssl dgst -sha1
OSX 10.6'da shasum
Debian'da ( perl
paketin bir parçası ) da bulunan bir yardımcı program var ve ben de Cygwin'e inanıyorum. Bu bir Perl betiğidir. Çoğu unix sisteminde Perl yüklü olduğundan, bu komut dosyasının her yerde bulunmadığından endişe ediyorsanız, bu komut dosyasını makyaj dosyanızla birlikte paketleyebilirsiniz.
Sisteminiz için doğru komutu seçme
Tamam, diyelim ki gerçekten her yerde çalışan bir komut bulamıyorsunuz.
Kabukta
type
Bir komutun mevcut olup olmadığını görmek için yerleşik olanı kullanın.
sum=
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do
if type "${x%% *}" >/dev/null 2>/dev/null; then sum=$x; break; fi
done
if [ -z "$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
$sum *.org
GNU markası
Sen kullanabilirsiniz shell
işlevi makefile yüklendiğinde bir kabuk pasajı çalıştırmak ve bir değişkende çıktı saklayın.
sum := $(shell { command -v sha1sum || command -v sha1 || command -v shasum; } 2>/dev/null)
%.sum: %
$(sum) $< >$@
Taşınabilir (POSIX) markası
Kabuk komutlarını yalnızca kural olarak çalıştırabilirsiniz, böylece bir sağlama toplamını hesaplayan her kuralın arama kodunu içermesi gerekir. Parçacığı bir değişkene koyabilirsiniz. Kurallardaki ayrı satırların bağımsız olarak değerlendirildiğini unutmayın. Ayrıca unutmayın $
kabuk ihtiyaca geçirilecek olan işaretler kaçan edilecek $$
.
determine_sum = \
sum=; \
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do \
if type "$${x%% *}" >/dev/null 2>/dev/null; then sum=$$x; break; fi; \
done; \
if [ -z "$$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
checksums.dat: FORCE
$(determine_sum); \
$$sum *.org
autotools