是否有编程的方式来构建htpasswd文件,而不依赖于操作系统特定的功能(即exec()
,passthru()
)?以编程方式构建htpasswd
19
A
回答
33
.httpasswd文件只是具有特定格式的文本文件,具体取决于指定的哈希函数。如果您正在使用MD5,就像这样:
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
这就是登录,冒号,$ APR1 $,盐和1000次MD5编码为Base64。如果选择SHA1,就像这样:
foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=
这就是登录,冒号,字符串{} SHA与base64编码的SHA1哈希。
如果你的语言有MD5或SHA-1和的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
-1
Trac附带一个Python替代htpasswd,我相信你可以移植到你选择的语言:htpasswd.py。
2
首先,创建这种形式:
<FORM METHOD="POST" ACTION="<? echo $_SERVER['PHP_SELF']; ?>" onSubmit='return ValidateForm()'>
Username<br /><INPUT TYPE="TEXT" NAME="user[]"><br /><br />
Password<br /><INPUT TYPE="PASSWORD" NAME="password1[]"><br />
<INPUT TYPE="PASSWORD" NAME="password2[]"><br /><br />
<INPUT type=submit name="submit" VALUE="Create .htpasswd entry" onclick="document.all.submit.style.visibility='hidden'">
</FORM>
然后,这个PHP代码会为你创建的密码:
if (isset($_POST['user']) && isset($_POST['password1'])) {
if($_POST['password1'] == $_POST['password2']) {
$user = $_POST['user'];
$password1 = $_POST['password1'];
$htpasswd_text = "";
for ($i = 0; $i < count ($user); $i++) {
$htpasswd_text .= "$user[$i]:".crypt($password1[$i],CRYPT_STD_DES)."";
}
echo "<br />Copy this line to your .htpasswd file:";
echo "<pre style=\"border-bottom-width:1px;border-bottom-style:solid;\">";
echo nl2br($htpasswd_text);
echo "</pre><br />";
} else {
echo "<pre style=\"border-bottom-width:1px;border-bottom-style:solid;\">Passwords do not match !</pre><br />";
}
}
的实际文本将追加到您HTPASSWD文件在$htpasswd_text
变量。
+0
crypt格式哈希已过时,不应再使用。 htpasswd的当前默认值为md5。 – bitmusher 2014-03-07 17:13:36
-1
从它在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%肯定这会工作,但我很确定。
相关问题
- 1. 以编程方式构建工件URL
- 2. 以编程方式构建工具栏
- 3. 以编程方式构建SQL查询
- 4. 以编程方式将构件添加到构建中?
- 5. 如何以编程方式编辑界面构建器对象?
- 6. 以编程方式构建Visual Studio解决方案?
- 7. 如何以编程方式构建Visual Studio解决方案?
- 8. 编程的方式构建表
- 9. 以编程方式创建流程图
- 10. 配置Jenkins以编程方式从构建参数确定构建时的slave?
- 11. 如何以编程方式复制构建于界面构建器中的UIViews?
- 12. iOS构建视图以编程方式取决于对象ivar
- 13. 以编程方式在java中构建JSON
- 14. 以编程方式构建xml相对布局
- 15. 以编程方式构建和发布.net Web App
- 16. 以编程方式构建/导航导航控制器
- 17. 使用powershell以编程方式构建复选框列表
- 18. 以编程方式构建xml布局文件
- 19. 如何以编程方式构建RFT项目?
- 20. 以编程方式本地化UIViews构建
- 21. 如何使用genshi.builder以编程方式构建HTML文档?
- 22. 如何以编程方式坚持构建?
- 23. 如何以编程方式在C#中构建ISO Week Number DataTable?
- 24. 如何以编程方式快速构建即席查询?
- 25. 以编程方式构建动态查询与猫鼬
- 26. 如何以编程方式取消嵌入的MsBuild构建
- 27. 如何以编程方式在Telerik中构建CommandItemTemplate?
- 28. 如何以编程方式构建数组/对象调用
- 29. 以编程方式将WXS构建到MSI中
- 30. 如何以编程方式解决CDT构建变量$ {ProjName}?
我发现代码生成的MD5格式的密码太http://techtalk.virendrachandak.com/using-php-create-passwords-for-htpasswd-file/ – 2014-03-03 21:55:49