Szukam polecenia lub narzędzi do obliczania wartości skrótu md5 , sha1 za pomocą jednego polecenia.
W tej chwili ubuntu ma sha1sum
i md5sum
polecenie do obliczania hash
wartości.
Szukam polecenia lub narzędzi do obliczania wartości skrótu md5 , sha1 za pomocą jednego polecenia.
W tej chwili ubuntu ma sha1sum
i md5sum
polecenie do obliczania hash
wartości.
Odpowiedzi:
Możesz to osiągnąć za pomocą odpowiedniego ninja-fu. :)
Znasz procedurę obliczania pojedynczo:
$ echo abc | md5sum
0bee89b07a248e27c83fc3d5951213c1 -
$ echo abc | sha1sum
03cfd743661f07975fa2f1220c5194cbaff48451 -
Edycja: zgodnie z sugestią @gertvdijk i nieco więcej czytając strony informacyjne, można to zrobić bezpośrednio za pomocą tee i Process Substitution obsługiwanych przez nowoczesne powłoki, bez przekierowań. W ten sposób możesz przekazać swoje dane do dwóch procesów i jednego pliku za pomocą tee:
$ echo abc | tee >(md5sum) >(sha1sum) > output.txt
Możliwe jest również połączenie, jeśli potrzebujesz więcej, ale musisz zadbać o STDOUT ze wszystkich podprocesów. To NIE da oczekiwanego rezultatu, ale łączy dwie pierwsze sumy kontrolne z danymi w pliku output.txt:
$ echo abc | tee >(md5sum) >(sha1sum) | tee >(sha256sum) >(sha512sum) > output.txt
Jeśli przekierujesz sumy kontrolne do pliku w podstawionych procesach, możesz połączyć je w dowolny sposób:
$ echo abc | tee >(md5sum > /tmp/md5.txt) >(sha1sum > /tmp/sha1.txt) | tee >(sha256sum > /tmp/sha256.txt) >(sha512sum > /tmp/sha512.txt) > output.txt
Oto moja wstępna sugestia bez zastępowania procesu, ale która pozwala na łączenie w łańcuch / rekurencyjne użycie bez mieszania danych i danych wyjściowych:
$ echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
0bee89b07a248e27c83fc3d5951213c1 -
03cfd743661f07975fa2f1220c5194cbaff48451 -
Sztuka polega na tym, aby użyć tee
, który powiela dane do STDOUT i pliku. Jesteśmy sprytni, mówiąc mu, aby zapisał dane do pliku / proc / self / fd / 2, który zawsze jest deskryptorem pliku STDERR bieżącego procesu. Dzięki > >(program)
składni możemy przekierować każdy deskryptor pliku do STDIN programu zamiast do pliku. Tak jak |
, ale z większą kontrolą. > >(md5sum)
przekierowuje STDOUT do md5sum
programu, a 2> >(sha1sum)
przekierowuje STDERR do sha1sum
programu.
Zauważ, że kolejność 2>
i >
wydaje się mieć znaczenie, muszę 2>
najpierw ustawić w linii poleceń. Są one oceniane od prawej do lewej, ale nie jestem pewien, dlaczego to robi różnicę.
Aby to zrobić na pliku lub dysku twardym, należy zamienić „echo abc” na cat lub dd, np .:
dd if=/dev/sda bs=8k | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
Sprytne w tym jest to, że możesz faktycznie rekurencyjnie i uruchomić kilka jednocześnie, nie tylko dwa. Składnia staje się owłosiona, ale to działa:
echo abc | tee -a /proc/self/fd/2 2> >(tee -a /proc/self/fd/2 2> >(sha256sum) > >(sha384sum) ) > >(sha512sum)
Jeśli chcesz przechwycić wynik i użyć go w skrypcie, to też działa:
A=$(echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum))
Teraz $A
jest ciąg zawierający wszystkie dane wyjściowe, w tym nowe wiersze. Możesz również przeanalizować wartości później:
echo "checksum=[$(echo "$A" | head -1 | cut -d " " -f 1)]"
Nie jestem jednak pewien, czy masz jakiekolwiek gwarancje dotyczące zamawiania wyników.
tee
i sprytne użycie przekierowania wyjścia w powłoce jest dobrym rozwiązaniem. Oszczędza to wiele zasobów, zwłaszcza podczas czytania dużych plików.
Nie mogę ci pomóc z wierszem poleceń, ale znam narzędzie GUI o nazwie Quickhash.
Możesz pobrać to narzędzie z Quickhash
Opis:
GUI dla systemu Linux i Windows, umożliwiające szybki wybór i późniejsze mieszanie plików (indywidualnie lub rekurencyjnie w strukturze folderów) tekstu i dysków (w systemie Linux). Zaprojektowany dla systemu Linux, ale dostępny również dla systemu Windows. Dostępne MD5, SHA1, SHA256, SHA512. Dane wyjściowe skopiowane do schowka lub zapisane jako plik CSV \ HTML.
Here i have find one python script from source which calculate hash values. and also i find some statistics about hash value calculation.
- `md5sum` takes 00:3:00 min to calculate 4GB USB.
- `sha2sum` takes 00:3:01 min to calculate 4GB USB.
- While phython script takes 3:16 min to calculate both MD5 and SHA1.
// Skrypt zaczyna się tutaj
def get_custom_checksum(input_file_name):
from datetime import datetime
starttime = datetime.now()
# START: Actual checksum calculation
from hashlib import md5, sha1, sha224, sha384, sha256, sha512
#chunk_size = 1 # 1 byte -- NOT RECOMENDED -- USE AT LEAST 1KB. When 1KB takes 1 min to run, 1B takes 19 minutes to run
#chunk_size = 1024 # 1 KB
chunk_size = 1048576 # 1024 B * 1024 B = 1048576 B = 1 MB
file_md5_checksum = md5()
file_sha1_checksum = sha1()
try:
with open(input_file_name, "rb") as f:
byte = f.read(chunk_size)
previous_byte = byte
byte_size = len(byte)
file_read_iterations = 1
while byte:
file_md5_checksum.update(byte)
file_sha1_checksum.update(byte)
previous_byte = byte
byte = f.read(chunk_size)
byte_size += len(byte)
file_read_iterations += 1
except IOError:
print ('File could not be opened: %s' % (input_file_name))
#exit()
return
except:
raise
# END: Actual checksum calculation
# For storage purposes, 1024 bytes = 1 kilobyte
# For data transfer purposes, 1000 bits = 1 kilobit
kilo_byte_size = byte_size/1024
mega_byte_size = kilo_byte_size/1024
giga_byte_size = mega_byte_size/1024
bit_size = byte_size*8
kilo_bit_size = bit_size/1000
mega_bit_size = kilo_bit_size/1000
giga_bit_size = mega_bit_size/1000
last_chunk_size = len(previous_byte)
stoptime = datetime.now()
processtime = stoptime-starttime
custom_checksum_profile = {
'starttime': starttime,
'byte_size': byte_size,
'kilo_byte_size': kilo_byte_size,
'mega_byte_size': mega_byte_size,
'giga_byte_size': giga_byte_size,
'bit_size': bit_size,
'kilo_bit_size': kilo_bit_size,
'mega_bit_size': mega_bit_size,
'giga_bit_size': giga_bit_size,
'file_read_iterations': file_read_iterations,
'last_chunk_size': last_chunk_size,
'md5_checksum': file_md5_checksum.hexdigest(),
'sha1_checksum': file_sha1_checksum.hexdigest(),
'stoptime': stoptime,
'processtime': processtime,
}
return custom_checksum_profile
def print_custom_checksum(input_file_name):
custom_checksum_profile = get_custom_checksum(input_file_name)
try:
print 'Start Time ::', custom_checksum_profile['starttime']
custom_checksum_profile ['file_read_iterations']) print ('Last Chunk (bytes):', custom_checksum_profile ['last_chunk_size']) print 'MD5 ::', custom_checksum_profile ['md5_checksum'] print 'SHA1 ::', custom_checksum_program '] print' Stop Time :: ', custom_checksum_profile [' stoptime '] print' Processing Time :: ', custom_checksum_profile [' processtime '] z wyjątkiem TypeError: # Obiekt „NoneType” nie podlega indeksowi --- w zasadzie powinno się to zdarzyć, gdy właściwość plik wejściowy nie mógł zostać otwarty #raise pass # wyjście csv
import argparse
script_version='0.0.2'
parser = argparse.ArgumentParser(description='Determine and print various checksums of an input file and its size. Supported checksums are MD5, SHA1, SHA224, SHA256, SHA384, and SHA512.', version=script_version)
parser.add_argument('-f', '--file', metavar='in-file', action='store', dest='file_name', type=str, required=True, help='Name of file for which the checksum needs to be calculated')
args = parser.parse_args()
print 'Processing File ::', args.file_name
print_custom_checksum(args.file_name)
md5sum hosts
. Następnie, w celu weryfikacji tej wyniki:echo "b9adfb2e2022a3a84ba06b55eeb2dc64 hosts" | md5sum --check
(należy podać:hosts: OK
)