문제

프로그래밍 방식으로 빌드하는 방법이 있나요? htpasswd OS 특정 기능에 의존하지 않고 파일(예: exec(), passthru())?

도움이 되었습니까?

해결책

.httpasswd 파일은 지정된 해시 함수에 따라 특정 형식의 텍스트 파일입니다.MD5를 사용하는 경우 다음과 같습니다.

foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241

그것은 로그인, 콜론, $apr1$, 솔트 및 base64로 인코딩된 1000배 md5입니다.SHA1을 선택하면 다음과 같습니다.

foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=

이는 로그인, 콜론, 문자열 {SHA} 및 base64로 인코딩된 SHA1 해시입니다.

귀하의 언어에 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

다른 팁

트랙 htpasswd를 Python으로 대체한 버전이 함께 제공됩니다. 이는 귀하가 선택한 언어로 이식할 수 있다고 확신합니다. 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