исходя из того, что в "помощи новичкам" никто не смог дать ответа, на злом и кроссплатформе тоже никто ничего не знает, гугл предлагает варианты, которые просто-напросто не работают - делаю вывод что вопрос этот очень важен не только для меня. давайте же найдем решение вместе. заготовка для теста: PHP: <?php if($_POST) { $text = trim($_POST['pass']); $pass = crypt($text, base64_encode($text)); // здесь !! file_put_contents('./.htpasswd', trim($_POST['login']).':'. $pass); $access = '<Files .htpasswd> deny from all </Files> AuthType Basic AuthName "Restricted Area" AuthUserFile ' .getcwd(). '/.htpasswd Require valid-user'; file_put_contents('./.htaccess', $access); echo '<b>done.</b> <br /><br />'; } ?><form method='post'> login: <input type='text' name='login' /><br /> pass: <input type='text' name='pass' /><br /> <input type='submit' value='create pass' /></form> Варианты кодирования от гугла: 1 $salt=substr($pass,0,2); $test_pw=crypt($pass,$salt); 2 $password = crypt($pass, base64_encode($pass)); 3 $pass = crypt($pass, base64_encode(CRYPT_STD_DES)) Ни один способ не работает, кроме варианта с некодированным паролем. Но он в свою очередь работает только на винде. Проверено на винде xp, apache 2.2, php 5.2.13 Нюанс: если сгенерить htpasswd онлайн-генератором типа этого http://www.htaccesstools.com/htpasswd-generator/ всё авторизуется нормально и на винде и на юникс-сервере.
Дикс из мана по ПХП. Работает и на винде и на линуксе (CentOS Apache/2.2.3 ) Генерацию соли лучше исправить на свою PHP: function crypt_apr1_md5($plainpasswd) { $salt = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"), 0, 8); $len = strlen($plainpasswd); $text = $plainpasswd.'$apr1$'.$salt; $bin = pack("H32", md5($plainpasswd.$salt.$plainpasswd)); for($i = $len; $i > 0; $i -= 16) { $text .= substr($bin, 0, min(16, $i)); } for($i = $len; $i > 0; $i >>= 1) { $text .= ($i & 1) ? chr(0) : $plainpasswd{0}; } $bin = pack("H32", md5($text)); for($i = 0; $i < 1000; $i++) { $new = ($i & 1) ? $plainpasswd : $bin; if ($i % 3) $new .= $salt; if ($i % 7) $new .= $plainpasswd; $new .= ($i & 1) ? $bin : $plainpasswd; $bin = pack("H32", md5($new)); } for ($i = 0; $i < 5; $i++) { $k = $i + 6; $j = $i + 12; if ($j == 16) $j = 5; $tmp = $bin[$i].$bin[$k].$bin[$j].$tmp; } $tmp = chr(0).chr(0).$bin[11].$tmp; $tmp = strtr(strrev(substr(base64_encode($tmp), 2)), "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); return "$"."apr1"."$".$salt."$".$tmp; }