Вопрос

Существует ли программный способ создания файлов 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%, что это сработает, но я почти уверен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top