Ich suche nach Befehlen oder Dienstprogrammen zum Berechnen des md5 , sha1-Hashwerts mit einem Befehl.
Gerade jetzt ubuntu hat sha1sum
und md5sum
Befehl zur Berechnung hash
Wert.
Ich suche nach Befehlen oder Dienstprogrammen zum Berechnen des md5 , sha1-Hashwerts mit einem Befehl.
Gerade jetzt ubuntu hat sha1sum
und md5sum
Befehl zur Berechnung hash
Wert.
Antworten:
Sie können dies mit einem richtigen Bash Ninja-Fu erreichen. :) :)
Sie kennen das Verfahren zur Berechnung nacheinander:
$ echo abc | md5sum
0bee89b07a248e27c83fc3d5951213c1 -
$ echo abc | sha1sum
03cfd743661f07975fa2f1220c5194cbaff48451 -
Bearbeiten: Wie @gertvdijk vorgeschlagen hat und die Infoseiten etwas genauer gelesen werden, kann dies direkt mit Tee und Process Substitution erfolgen, die von modernen Shells unterstützt werden, ohne Weiterleitungen. Auf diese Weise können Sie Ihre Daten mit tee an zwei Prozesse und eine Datei übergeben:
$ echo abc | tee >(md5sum) >(sha1sum) > output.txt
Es ist auch möglich, zu verketten, wenn Sie mehr benötigen, aber Sie müssen sich um STDOUT aus allen Unterprozessen kümmern. Dies gibt Ihnen NICHT das erwartete Ergebnis, sondern mischt die ersten beiden Prüfsummen mit den Daten in output.txt:
$ echo abc | tee >(md5sum) >(sha1sum) | tee >(sha256sum) >(sha512sum) > output.txt
Wenn Sie die Prüfsummen in eine Datei innerhalb der ersetzten Prozesse umleiten, können Sie diese nach Belieben verketten:
$ echo abc | tee >(md5sum > /tmp/md5.txt) >(sha1sum > /tmp/sha1.txt) | tee >(sha256sum > /tmp/sha256.txt) >(sha512sum > /tmp/sha512.txt) > output.txt
Hier ist mein erster Vorschlag ohne Prozessersetzung, der jedoch eine Verkettung / rekursive Verwendung ermöglicht, ohne die Daten und die Ausgabe zu mischen:
$ echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
0bee89b07a248e27c83fc3d5951213c1 -
03cfd743661f07975fa2f1220c5194cbaff48451 -
Der Trick hierbei ist die Verwendung tee
, die die Daten in STDOUT und eine Datei dupliziert. Wir sind schlau, indem wir ihm sagen, dass er die Daten in die Datei / proc / self / fd / 2 schreiben soll, die zufällig immer der STDERR-Dateideskriptor des aktuellen Prozesses ist. Und mit der > >(program)
Syntax können wir jeden Dateideskriptor auf die STDIN eines Programms anstatt auf eine Datei umleiten. Genau wie |
, aber mit mehr Kontrolle. > >(md5sum)
leitet STDOUT zum md5sum
Programm um, während 2> >(sha1sum)
STDERR zum sha1sum
Programm umgeleitet wird .
Beachten Sie, dass die Reihenfolge 2>
und >
wichtig zu sein scheint, ich muss 2>
zuerst in die Befehlszeile setzen. Diese werden von rechts nach links ausgewertet, aber ich bin mir nicht sicher, warum dies einen Unterschied macht.
Um dies auf einer Datei oder einer Festplatte zu tun, sollten Sie "echo abc" durch eine Katze oder eine dd ersetzen, z.
dd if=/dev/sda bs=8k | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
Das Schöne daran ist, dass Sie tatsächlich mehrere gleichzeitig rekursieren und ausführen können, nicht nur zwei. Die Syntax wird haarig, aber das funktioniert:
echo abc | tee -a /proc/self/fd/2 2> >(tee -a /proc/self/fd/2 2> >(sha256sum) > >(sha384sum) ) > >(sha512sum)
Wenn Sie das Ergebnis erfassen und in einem Skript verwenden möchten, funktioniert dies auch:
A=$(echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum))
Jetzt $A
ist eine Zeichenfolge, die die gesamte Ausgabe einschließlich der Zeilenumbrüche enthält. Sie können die Werte auch später analysieren:
echo "checksum=[$(echo "$A" | head -1 | cut -d " " -f 1)]"
Ich bin mir jedoch nicht sicher, ob Sie Garantien für die Bestellung der Ausgabe haben.
tee
Die clevere Verwendung der Ausgabeumleitung in der Shell ist der richtige Weg. Dies spart viele Ressourcen, insbesondere beim Lesen großer Dateien.
Ich kann Ihnen nicht mit der Befehlszeile helfen, aber ich kenne ein GUI-Tool namens Quickhash.
Sie können dieses Tool von Quickhash herunterladen
Beschreibung:
Eine Linux- und Windows-GUI zum schnellen Auswählen und anschließenden Hashing von Textdateien (einzeln oder rekursiv in einer Ordnerstruktur) und (unter Linux) Datenträgern. Entwickelt für Linux, aber auch für Windows verfügbar. MD5, SHA1, SHA256, SHA512 erhältlich. Ausgabe in die Zwischenablage kopiert oder als CSV \ HTML-Datei gespeichert.
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.
// Skript beginnt hier
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 ('Letzter Block (Bytes):', custom_checksum_profile ['last_chunk_size']) print 'MD5 ::', custom_checksum_profile ['md5_checksum'] print 'SHA1 ::', custom_checksum_1 '] print' Stop Time :: ', custom_checksum_profile [' stoptime '] print' Verarbeitungszeit :: ', custom_checksum_profile [' processtime '] außer TypeError: #' NoneType 'Objekt ist nicht abonnierbar --- im Grunde sollte dies passieren, wenn das Eingabedatei konnte nicht geöffnet werden #raise pass # csv Ausgabe
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
. Dann dieses Ergebnis zu überprüfen:echo "b9adfb2e2022a3a84ba06b55eeb2dc64 hosts" | md5sum --check
(geben sollte:hosts: OK
)