Bir komutla md5 , sha1 karma değerini hesaplamak için komut veya yardımcı programlar arıyorum .
Şu anda ubuntu değer hesaplamak için sha1sum
ve md5sum
komut var hash
.
Bir komutla md5 , sha1 karma değerini hesaplamak için komut veya yardımcı programlar arıyorum .
Şu anda ubuntu değer hesaplamak için sha1sum
ve md5sum
komut var hash
.
Yanıtlar:
Bunu bazı uygun bash ninja-fu ile başarabilirsiniz. :)
Her seferinde bir tane hesaplama prosedürünü biliyorsunuz:
$ echo abc | md5sum
0bee89b07a248e27c83fc3d5951213c1 -
$ echo abc | sha1sum
03cfd743661f07975fa2f1220c5194cbaff48451 -
Düzenleme: @gertvdijk önerdiği gibi ve bilgi sayfalarını biraz daha okumak, bu doğrudan yönlendirmeleri olmadan, modern kabuklar tarafından desteklenen tee ve Süreç Yerine koyma ile yapılabilir. Bu şekilde, tee kullanarak verilerinizi iki işleme ve bir dosyaya aktarabilirsiniz:
$ echo abc | tee >(md5sum) >(sha1sum) > output.txt
Daha fazlasına ihtiyacınız varsa zincirleme yapmak da mümkündür, ancak tüm alt işlemlerden STDOUT'a dikkat etmeniz gerekir. Bu size beklenen sonucu VERMEZ, ancak ilk iki sağlama toplamını output.txt dosyasındaki verilerle karıştırır:
$ echo abc | tee >(md5sum) >(sha1sum) | tee >(sha256sum) >(sha512sum) > output.txt
Sağlama toplamlarını değiştirilen işlemlerin içindeki bir dosyaya yeniden yönlendirirseniz, bunları istediğiniz gibi zincirleyebilirsiniz:
$ echo abc | tee >(md5sum > /tmp/md5.txt) >(sha1sum > /tmp/sha1.txt) | tee >(sha256sum > /tmp/sha256.txt) >(sha512sum > /tmp/sha512.txt) > output.txt
İşte süreç ikamesi olmadan ilk öneri, ancak veri ve çıktıyı karıştırmadan zincirleme / özyinelemeli kullanıma izin veren:
$ echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
0bee89b07a248e27c83fc3d5951213c1 -
03cfd743661f07975fa2f1220c5194cbaff48451 -
Buradaki hile tee
, verileri STDOUT'a ve bir dosyaya kopyalayan kullanmaktır . Verileri / proc / self / fd / 2 dosyasına yazmasını söyleyerek zekiyiz, bu da her zaman geçerli işlem 'STDERR dosya tanımlayıcısıdır. > >(program)
Sözdizimi ile her dosya tanımlayıcısını dosya yerine programın STDIN'ine yeniden yönlendirebiliriz. Aynen |
, ama daha fazla kontrol ile. > >(md5sum)
STDOUT'u md5sum
programa, 2> >(sha1sum)
STDERR'ı sha1sum
programa yönlendirir .
Unutmayın 2>
ve >
önem sırasına göre , 2>
önce komut satırına koymak zorundayım . Bunlar sağdan sola değerlendirilir, ancak bunun neden bir fark yarattığından emin değilim.
Bunu bir dosyada veya sabit sürücüde yapmak için, "echo abc" yerine bir kedi veya bir dd koymalısınız, örn:
dd if=/dev/sda bs=8k | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum)
Bununla ilgili en güzel şey, aslında sadece ikisini değil, aynı anda birkaçını tekrarlayabileceğiniz ve çalıştırabileceğinizdir. Sözdizimi kıllı olur, ancak bu işe yarar:
echo abc | tee -a /proc/self/fd/2 2> >(tee -a /proc/self/fd/2 2> >(sha256sum) > >(sha384sum) ) > >(sha512sum)
Sonucu yakalamak ve bir komut dosyasında kullanmak istiyorsanız, bu da işe yarar:
A=$(echo abc | tee -a /proc/self/fd/2 2> >(sha1sum) > >(md5sum))
Şimdi $A
yeni satırlar dahil tüm çıktıları içeren bir dize. Değerleri daha sonra da ayrıştırabilirsiniz:
echo "checksum=[$(echo "$A" | head -1 | cut -d " " -f 1)]"
Çıktının siparişiyle ilgili herhangi bir garantiniz olduğundan emin değilim.
tee
ve çıkış yönlendirmesinin kabukta akıllıca kullanılması yoludur. Bu, özellikle büyük dosyaları okurken çok fazla kaynak tasarrufu sağlar.
Komut satırı ile size yardımcı olamaz ama quickhash adında bir GUI aracı biliyorum .
Bu aracı Quickhash'tan indirebilirsiniz
Açıklama:
Dosyaların (bir klasör yapısı boyunca tek tek veya özyinelemeli olarak) metin ve (Linux'ta) disklerin hızlı seçimini ve sonraki karmasını sağlayan bir Linux ve Windows GUI. Linux için tasarlanmıştır, ancak Windows için de mevcuttur. MD5, SHA1, SHA256, SHA512 mevcut. Çıktı panoya kopyalandı veya CSV \ HTML dosyası olarak kaydedildi.
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.
// Script buradan başlıyor
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 ('Son Yığın (bayt):', custom_checksum_profile ['last_chunk_size']) 'SH5 ::', custom_checksum_profile ['md5_checksum'] yazdır 'SHA1 ::', custom_checksum '] print' Stop Time :: ', custom_checksum_profile [' stoptime '] print' Processing Time :: ', custom_checksum_profile [' processtime '] yazarak TypeError: #' NoneType 'nesnesi abone olunamazsa --- temelde giriş dosyası açılamadı # yükseltme pass # csv çıktı
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
. Sonra, bu sonucu doğrulamak için:echo "b9adfb2e2022a3a84ba06b55eeb2dc64 hosts" | md5sum --check
(vermelidir:hosts: OK
)