SSHA tuzlanmış bir SHA-1'dir. Varsayılan olarak son 4 Bayt tuzdur. Slappasswd çıktısı
'{<Hash Method>}<base64 converted hash and salt>'
Bu nedenle, düz bir metin şifresinin tuzlanmış SHA'ya eşit olup olmadığını test etmek için şunları yapmanız gerekir:
- karma yöntem belirleyicisini örneğin sed ile soyun.
- base64 dizesinin kodunu çöz
- Son 4 baytı çıkarın, bu tuz
- tuzu düz metin parolasıyla bitiştir
- vuruldu
- karşılaştırmak
Base64 kodu çözülmüş dize karmayı ikili biçimde içerir ve yazdırılamaz, bu nedenle od ile hex'e dönüştüreceğiz. İlk 3 adım aşağıdaki kodla gerçekleştirilir:
#!/bin/bash
output=$(slappasswd -h {SSHA} -s password)
hashsalt=$( echo -n $output | sed 's/{SSHA}//' | base64 -d)
salt=${hashsalt:(-1),(-4)}
echo $output
echo $(echo -n $hashsalt | od -A n -t x1)
echo "Salt: $salt"
Çıktı olabilir:
{SSHA}fDu0PgKDn1Di9W1HMINpPXRqQ9jTYjuH
7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8 d3 62 3b 87
<------------------------- Hash --------------------------> <-- Salt-->
Salt: ▒b;▒
Şimdi tuzu düz metin parolasına birleştirmeliyiz ve bu sefer tuzlamadan hash etmeliyiz! Sahip olduğum problem, tuzun yazdırılamayan karakterler de dahil olmak üzere herhangi bir karakter olabileceğini anlamaktı. Bu yazdırılamayan karakterleri birleştirmek için printf ve onaltılık temsillerini kullanacağız:
slappasswd -h {SHA} -s $(printf 'password\xd3\x62\x3b\x87') | sed 's/{SHA}//' | base64 -d | od -A n -t x1
Çıktı:
7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8
Bu, yukarıdaki karmaya eşittir. Şimdi, bu 'şifre' nin tuzlu SHA ile eşleştiğini doğruladık.
Teşekkürler ve daha fazla okuma: http://cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm
slappasswd
{SSHA} veya SHA-1'in tuzlanmış versiyonudur.