Поскольку вы не можете «извлечь» пароль из одностороннего хеша, такого как SHA-512, самое близкое, что мы можем получить, - это возможность сгенерировать тот же хеш из того же пароля и соли.Давайте посмотрим на код Ruby:
def self.hash_password( password, salt )
salted_password = password.insert 4, salt
digested_password = Digest::SHA512.hexdigest("#{salted_password}")
return digested_password
end
Единственное, что немного "странно", это вызов метода .insert
в строке пароля.По сути, это соль в пароль, начиная с четвертого символа индекса.Обычно соли просто объединяются с паролем.
Мы можем повторить это, используя substr
:
function hash_password($password, $salt) {
$salted_password = substr($password, 0, 4) . $salt . substr($password, 4);
return hash('sha512', $salted_password);
}
Я использую теперь используемый по умолчанию здесь расширение хеша , так как это в значительной степени самый надежный способ создания хеша SHA-512.
Используя этот код, вы должны иметь возможность генерировать идентичные хеш-коды для заданного идентичного пароля и комбинации символов.Я не уверен, что будет, если пароль будет длиной менее пяти символов.
Да, похоже, он должен работать:
[charles@lobotomy ~]$ irb
irb(main):001:0> require 'digest/sha2'
=> true
irb(main):002:0> def hash_password( password, salt )
irb(main):003:1> salted_password = password.insert 4, salt
irb(main):004:1> digested_password = Digest::SHA512.hexdigest("#{salted_password}")
irb(main):005:1> return digested_password
irb(main):006:1> end
=> nil
irb(main):007:0* puts hash_password('password', 'salt')
92d3efdbf51d199b0930c427b77dc8d5cf41ac58b6fab5f89cc3f32d719a8f6ffcdff6211bdd0565a6e7b09925839e5dcce1fa5abf65eca87c6a883ab0b510b9
=> nil
irb(main):018:0> exit
[charles@lobotomy ~]$
[charles@lobotomy ~]$ php -a
Interactive shell
php > function hash_password($password, $salt) {
php { $salted_password = substr($password, 0, 4) . $salt . substr($password, 4);
php { return hash('sha512', $salted_password);
php { }
php > echo hash_password('password', 'salt');
92d3efdbf51d199b0930c427b77dc8d5cf41ac58b6fab5f89cc3f32d719a8f6ffcdff6211bdd0565a6e7b09925839e5dcce1fa5abf65eca87c6a883ab0b510b9
php >