Apache Htpasswd生成和验证密码

Assuming you create the password using the following command and "myPassword" as the password
  htpasswd -c /usr/local/apache/passwd/passwords username

  This will create a file that looks like
  username:$apr1$sr15veBe$cwxJZHTVLHBkZKUoTHV.k.

  The $apr1$ is the hashing method, sr15veBe is the salt, and the last string is the hashed password. You can validate it using openssl using
  openssl passwd -apr1 -salt sr15veBe myPassword

  which will output
  $apr1$sr15veBe$cwxJZHTVLHBkZKUoTHV.k.

  A pipeline which you could use would be:
  username="something"
htpasswd -c /usr/local/apache/passwd/passwords $username
****Enter password:****

salt=$($(cat passwords | cut -d$ -f3)
password=$(openssl passwd -apr1 -salt $salt)
****Enter password:****

grep -q $username:$password passwords
if [ $? -eq 0 ]
then echo "password is valid"
else
echo "password is invalid"
fi
You may need to change your openssl command, as Apache‘s htpasswd command crypts slightly differently on each system.

htpasswd 是apache的小工具,在apache安装目录bin下可找到。

Usage:
    htpasswd [-cmdpsD] passwordfile username
    htpasswd -b[cmdpsD] passwordfile username password

    htpasswd -n[mdps] username
    htpasswd -nb[mdps] username password
 -c  创建一个新的加密密码文件
 -n  不更新文件,显示结果
 -m  使用MD5加密密码
 -d  使用CRYPT加密密码(默认)
 -p  不加密密码
 -s  使用SHA加密密码
 -b  直接在命令行输入密码,而不是提示后再输入密码
 -D  删除用户
在Windows, NetWare与 TPF系统,‘-m‘ 是默认的密码加密方式。
在所有其他系统,‘-p‘可能不能使用。

1.生成加密密码文件

htpasswd -c .pass fdipzone
New password:
Re-type new password:
Adding password for user fdipzone

这样就生成了一个使用CRYPT加密密码的文件

以下命令可以生成用md5加密密码的文件,b参数的作用是在命令行直接把密码输入,这样就不需要等提示输入密码再输入了。

htpasswd -cmb .pass fdipzone 123456
Adding password for user fdipzone

2.修改密码

htpasswd .pass fdipzone
New password:
Re-type new password:
Updating password for user fdipzone

3.增加用户

htpasswd .pass guest
New password:
Re-type new password:
Adding password for user guest

4.删除用户

htpasswd -D .pass guest
Deleting password for user guest

如果使用p参数,不加密密码,系统会提示Warning,因此为了安全最好不要使用p参数。

htpasswd -cp .pass fdipzone
Warning: storing passwords as plain text might just not work on this platform.

.htaccess 调用加密密码文件控制访问权限

首先 Allowoverride 需要设置为 AuthConfig 或 All

然后在需要控制访问的目录下增加.htaccess

.htaccess内容如下

AuthType "Basic"
AuthName "Password Required" #提示文字
AuthUserFile "/home/fdipzone/sites/pass/.pass" #加密密码的文件
Require valid-user

当访问该目录下的文件时,则会弹出要求输入用户名和密码的输入框。输入正确的用户名和密码后就能正常访问。

tips:为了安全,加密的密码文件请不要放在线上用户可以访问的路径。

OpenSSL命令---passwd

用途:

passwd命令计算一个密钥的哈希值或者计算列表中的每个密钥的hash值。

用法:

openssl passwd [-crypt] [-1] [-apr1] [-salt  string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}

选项说明:

-crypt:生成标准的unix口令密文。默认选项。

-1:用MD5基于BSD的密钥算法。

-apr1:Apache md5口令密文。

-salt  string:用指定的字符串填充。当从终端读取一个密钥时,则填充它。

-in file:从指定的文件中读取密钥。

-stdin:从stdin中读取密钥。

-noverify:当从终端读取口令时不去验证它。

-quiet:当命令行提供的密钥是缩短了的,则不输出警告。

-table:用户输入的口令和结果用缩进隔开。

password:需要处理的密钥值。

实例:

openssl passwd -crypt -salt xx password  

打印出xxj31ZMTZzkVA。

openssl passwd -1 -salt xxxxxxxx password

打印出($1$xxxxxxxx$UYCIxa628.9qXjpQCjM4a.)。

openssl passwd -apr1 -salt xxxxxxxx password

打印出<$apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0。

https://zhidao.baidu.com/question/372107922550340204.html

http://blog.csdn.net/fdipzone/article/details/41020045

http://blog.csdn.net/as3luyuan123/article/details/14917959

原文地址:https://www.cnblogs.com/chuancheng/p/8196551.html

时间: 2024-07-30 05:39:24

Apache Htpasswd生成和验证密码的相关文章

APACHE使用htpasswd生成Basic私密站点

htpasswd命令:a. 生成加密密码文件: htpasswd -c /home/lee/.htpasswd lee b. 修改密码: htpasswd /home/lee/.htpasswd lee c. 增加用户: htpasswd /home/lee/.htpasswd lee_01 d. 删除用户: htpasswd -D /home/lee/.htpasswd lee APACHE(在私密站点新建.htaccess文件): AuthType "Basic" AuthName

《Apache服务用户身份验证管理》RHEL6.3

1.安装apache软件包 Yum install httpd 2.启动apache服务 /etc/init.d/httpd restart 3.创建一个目录,内编辑一个index.html文件 4.给这个目录设密码(是不是很passwd文件内用户的密码文件很像) 5.编辑apache配置文件/etc/httpd/conf/httpd.conf文件(添加如下行) 6.重启apache服务 7.验证是否配置成功 8.结果 <Apache服务用户身份验证管理>RHEL6.3,码迷,mamicode

使用truelicense实现用于JAVA工程license机制(包括license生成和验证)

开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了.不同于在代码中直接加上时间约束,需要重新授权的时候使用license可以避免修改源码,改动部署,授权方直接生成一个新的license发送给使用方替换掉原来的license文件即可.下面将讲述使用truelicense来实现license的生成和使用.Truelicense是一个开源的证书管理引擎,详细介绍见 https://truelicense.java.net/ [此地址已不可用(苏醒若蘅注)]

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

原文:[.NET Core项目实战-统一认证平台]第十二章 授权篇-深入理解JWT生成及验证流程 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性,最后我们使用.net webapi来实现一个外部接口(本来想用JAVA来实现的,

用数组实现从文件搜索帐户和验证密码

最近一个同学在写个银行管理系统,然后问我怎么从文件搜索帐户,给了方法后又不懂文件里面的密码怎么与输入的匹配.一般来说,高效的做法是用链表实现.用数组实现不是高效的方法,而且浪费空间.再者,对于账户类有个人信息集合的,一般用结构体,代码写起来也方便简单. 但是他却用数组来做,而且没有用结构体.对于这种情况下如何搜索帐户,如何验证密码呢? 我尝试了一下,发现不难解决. 解决这个问题的方法:用文件数据的排序定位来做. 第一步:文件信息读入 用fscanf 实现文件读出文件信息. 1 char a[20

servlet生成验证码验证的实现

servlet中的方法实现代码: import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.servlet.ServletException; imp

Linux生成高强度密码

在撰写,自动化脚本.往往需要添加账户及密码.如何自动化填写随机密码,有点意思.... 01.openssl生成密码 [[email protected] ~]# openssl rand -base 14Usage: rand [options] numwhere options are-out file - write to file-engine e - use engine e, possibly a hardware device.-rand file:file:... - seed P

[C#]简单离线注册码生成与验证

本文使用RSA非对称加密和Base64简单地实现离线注册码的生成与验证功能. 主要思路就是提供者持有密钥,通过RSA加密客户机标识或时间标识,再通过Base64加密成不太难看的注册码,然后分发给客户机.客户机解Base64后,通过持有的公钥来验证注册码是否与本机标识或时间标识相符. 一.生成公密钥 RSACryptoServiceProvider cryptor = new RSACryptoServiceProvider(); File.WriteAllText("PrivateKey.xml

正则表达式验证密码强度

private int CheckSecurity(string pwd) { return Regex.Replace(pwd, "^(?:([a-zA-Z])|([0-9])|(.)){9,}|(.)+$", "$1$2$3$4").Length; } 在网上看过很多种验证密码强度的方法,但无一不长篇大论. 今天无意发现一种很牛X的方法,利用正则,且只有一句话就搞定了. 大概介绍一下: 密码字符包括:小写字母.大写字母.数字.符号等: 这个正则会得到五个捕获组,