Em funções de hashing padrão (por exemplo, senhas UNIX em / etc / shadow), o sal é armazenado como parte do hash.
Passe o valor do hash armazenado como o sal e você deve obter o resultado correto.
O valor da senha hash em / etc / shadow é na verdade um registro $ delimitado. Por exemplo, temos esse hash da senha 'blarg':
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0
Existem três campos separados por $ 's que são
- A função hash (neste caso, '1', representando MD5)
- O sal (que é 'KfcI / JTQ')
- O valor de hash (que é 'b5VTf4i9Mnf6QFgLuVZNM0')
Se você usar o mkpasswd várias vezes, o hash irá mudar.
$ mkpasswd -m md5 blarg
$1$Gst52IWk$8ARVeSlpkcZOlyKV10Slu/
$ mkpasswd -m md5 blarg
$1$JeqRviA/$GnH/AvGnZEG9wLfJjiaAt1
No entanto, passando o sal (ou seja, o segundo campo) do valor de hash acima, podemos associá-lo ao hash original:
$ mkpasswd -m md5 -S KfcI/JTQ blarg
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0
Você também pode passar o hash da senha inteira (embora omita a função hash).
$ mkpasswd -m md5 -S KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 blarg
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0
No Linux, o tipo de hash pode ser controlado em /etc/login.defs. Tenha muito cuidado ao alterar isso, você pode bloquear-se completamente fora do sistema. Sugiro que leia a página de manual cuidadosamente, olhando especificamente para os títulos MD5_CRYPT_ENAB e ENCRYPT_METHOD.