关于php:以编程方式构建htpasswd

关于php:以编程方式构建htpasswd

Programmatically building htpasswd

有没有一种不依赖于操作系统特定功能(即exec()passthru())的生成htpasswd文件的编程方式?


.httpasswd文件只是具有特定格式的文本文件,具体取决于指定的哈希函数。如果您使用的是MD5,则它们如下所示:

1
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241

这就是登录名,冒号,$ apr1 $,salt和1000倍的md5编码为base64。如果选择SHA1,则它们如下所示:

1
foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=

这就是登录名,冒号,字符串{SHA}和以base64编码的SHA1哈希。

如果您的语言具有MD5或SHA1和base64的实现,则可以像下面这样创建文件:

1
2
3
4
5
6
7
8
9
10
11
<?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


按照PHP网站上的说法,您可以通过以下方法使用crypt():

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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%确信这会起作用,但是我很


Trac附带了htpasswd的Python替代品,我相信您可以移植到您选择的语言:htpasswd.py。


推荐阅读

    linux改文件权限命令?

    linux改文件权限命令?,系统,工具,档案,权限,文件,信息,命令,目录,选项,用户,

    linux命令交换文件名?

    linux命令交换文件名?,命令,文件,数据,名称,工具,地址,软件,系统,基础知识,

    linux下替换文件命令?

    linux下替换文件命令?,文件,一致,评论,名称,标的,资料,工作,命令,字符串,内

    linux文件nl命令?

    linux文件nl命令?,地址,工作,信息,系统,情况,标准,实时,对比,百度,命令,linux

    linux寻找文件夹命令?

    linux寻找文件夹命令?,名称,命令,文件,位置,工作,标准,目录,子目录,文件名,

    linux把文件复制命令?

    linux把文件复制命令?,名字,文件,软件,系统,位置,目录,命令,源文件,目标,文

    linux文件夹合并命令?

    linux文件夹合并命令?,文件,对比,第一,下来,命令,文件夹,两个,字段,内容,数

    linux终端命令行编程?

    linux终端命令行编程?,系统,工作,命令,终端,概念,时间,第一,代码,发行,地方,L

    linux下文件创建命令?

    linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,

    linux命令行安装文件?

    linux命令行安装文件?,软件,官网,密码,中心,电脑,文件,命令,终端,指令,版本,L

    linux解压文件命令行?

    linux解压文件命令行?,系统,电脑,命令,文件,平台,名称,软件,管理,标准,目录,

    linux命令编辑文件?

    linux命令编辑文件?,系统,状态,电脑,命令,数据,标准,不了,名称,发行,网络,Lin

    linux文件乱码命令?

    linux文件乱码命令?,系统,环境,乱码,信息,状态,盘中,文件,字符集,中文,文件

    linux的删除文件命令?

    linux的删除文件命令?,名称,不了,系统,文件夹,命令,文件,环境,档案,目录,指

    linux赋值文件命令?

    linux赋值文件命令?,标准,数据,系统,状态,命令,赋值,变量,权限,文件,脚本,lin

    linux备份文件的命令?

    linux备份文件的命令?,系统,设备,网络,工具,平台,名称,备份,文件,命令,目录,l

    linux命令创建文件加?

    linux命令创建文件加?,名字,管理,系统,名称,密码,首次,命令,文件,文件夹,位

    linux编程调用命令?

    linux编程调用命令?,系统,标准,管理,工作,基础知识,情况,环境,设备,基础,首

    linux文件基础命令?

    linux文件基础命令?,地址,基础,管理,命令,情况,系统,工作,标准,单位,网络,lin