Saya mengharapkan slappasswd
untuk menghasilkan hash tetap tetapi tampaknya output acak karena saya tidak pernah mendapatkan output yang sama untuk kata sandi input yang sama:
$ slappasswd -s secret
{SSHA}mCXsPZkfgQYZr2mKHpy5Iav+2S2XlVU3
$ slappasswd -s secret
{SSHA}62oXsalJBuopYfHhi6hGp6AESuWNIVnd
$ slappasswd -s secret
{SSHA}0Ulc8+ugMi3NbTtWnclOFW1LKCqRdsT8
Selama otentikasi, bagaimana slapd tahu cara mengacak hash untuk kata sandi yang diberikan dengan cara yang sama sehingga dapat mencocokkan kata sandi yang ditentukan di tempat pertama?
slappasswd
adalah {SSHA}, atau versi asin SHA-1.{SSHA}
mengandung kedua garam dan hash.SSHA adalah SHA-1 asin. Secara default 4 Bytes terakhir adalah garam. Output dari slappasswd adalah
Jadi untuk menguji, apakah kata sandi teks biasa sama dengan SHA asin, Anda harus:
String base64-decoded berisi hash dalam bentuk biner dan tidak dapat dicetak, jadi kita akan mengubahnya menjadi hex dengan od. 3 langkah pertama sedang dilakukan oleh kode berikut:
Outputnya bisa:
Jadi sekarang kita harus menggabungkan garam ke kata sandi teks biasa dan memotongnya, kali ini tanpa salting! Masalah yang saya miliki adalah pemahaman, bahwa garam dapat benar-benar karakter apa saja, termasuk karakter yang tidak dapat dicetak. Untuk menggabungkan karakter-karakter yang tidak dapat dicetak ini, kami akan menggunakan printf dan representasi heksadesimalnya:
Outputnya adalah:
Yang sama dengan hash di atas. Sekarang kami telah memverifikasi, bahwa 'kata sandi' cocok dengan SHA asin.
Terima kasih dan bacaan lebih lanjut: http://cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm
sumber