Программно сборка htpasswd
-
09-06-2019 - |
Вопрос
Существует ли программный способ создания файлов htpasswd , независимо от конкретных функций ОС (например, exec ()
, passthru ()
)
Решение
.httpasswd - это просто текстовые файлы определенного формата, в зависимости от указанной хеш-функции. Если вы используете MD5, они выглядят так:
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
Это логин, двоеточие, $ apr1 $, соль и 1000 md5, закодированные как base64. Если вы выберете SHA1, они будут выглядеть так:
foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=
Это логин, двоеточие, строка {SHA} и хеш SHA1, закодированный с base64.
Если ваш язык имеет реализацию MD5 или SHA1 и base64, вы можете просто создать файл следующим образом:
<?php
$login = 'foo';
$pass = 'pass';
$hash = base64_encode(sha1($pass, true));
$contents = $login . ':{SHA}' . $hash;
file_put_contents('.htpasswd', $contents);
?>
Вот дополнительная информация о формате:
http://httpd.apache.org/docs/2.2/misc/ password_encryptions.html р>
Другие советы
Trac поставляется с заменой Python на htpasswd, которую, я уверен, вы могли бы перенести на свой язык выбор: htpasswd.py .
Из того, что написано на веб-сайте PHP, вы можете использовать crypt () следующим способом:
<?php
// Set the password & username
$username = 'user';
$password = 'mypassword';
// Get the hash, letting the salt be automatically generated
$hash = crypt($password);
// write to a file
file_set_contents('.htpasswd', $username ':' . $contents);
?>
Часть этого примера можно найти: http://ca3.php.net/crypt р>
Это, конечно, перезапишет весь существующий файл, поэтому вы захотите выполнить некоторую конкатенацию.
Я не уверен на 100%, что это сработает, но я почти уверен.