<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 其他文档

密码格式

可用语言:  en  |  fr 

关于 Apache 生成的和理解的密码加密格式的说明。

Support Apache!

另请参阅

top

基本身份验证

Apache 识别五种基本身份验证密码格式。请注意,并非所有格式在所有平台上都适用。

bcrypt
"$2y$" + crypt_blowfish 算法的结果。有关算法的详细信息,请参阅 APR 源文件 crypt_blowfish.c
MD5
"$apr1$" + 使用 Apache 特定算法的结果,该算法使用随机 32 位盐和密码的各种组合进行迭代(1,000 次)MD5 摘要。有关算法的详细信息,请参阅 APR 源文件 apr_md5.c
SHA1
"{SHA}" + 密码的 Base64 编码 SHA-1 摘要。不安全。
CRYPT
仅限 Unix。使用传统的 Unix crypt(3) 函数,并使用随机生成的 32 位盐(仅使用 12 位)和密码的前 8 个字符。不安全。
纯文本(即 *未加密*)
仅限 Windows 和 Netware。不安全。

使用 htpasswd 生成值

bcrypt

$ htpasswd -nbB myName myPassword
myName:$2y$05$c4WoMPo3SXsafkva.HHa6uXQZWr7oboPiC2bT/r7q1BB8I2s0BRqC

MD5

$ htpasswd -nbm myName myPassword
myName:$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/

SHA1

$ htpasswd -nbs myName myPassword
myName:{SHA}VBPuJHI7uixaa6LQGWx4s+5GKNE=

CRYPT

$ htpasswd -nbd myName myPassword
myName:rqXexS6ZhobKA

使用 OpenSSL 命令行程序生成 CRYPT 和 MD5 值

OpenSSL 了解 Apache 特定的 MD5 算法。

MD5

$ openssl passwd -apr1 myPassword
$apr1$qHDFfhPC$nITSVHgYbDAK1Y0acGRnY0

CRYPT

openssl passwd -crypt myPassword
qQ5vTYO3c8dsU

使用 OpenSSL 命令行程序验证 CRYPT 或 MD5 密码

CRYPT 密码的盐是前两个字符(转换为二进制值)。要验证 myPasswordrqXexS6ZhobKA

CRYPT

$ openssl passwd -crypt -salt rq myPassword
警告:密码截断为 8 个字符
rqXexS6ZhobKA

请注意,使用 myPasswo 而不是 myPassword 将产生相同的结果,因为 CRYPT 密码仅考虑前 8 个字符。

MD5 密码的盐位于 $apr1$ 和后面的 $ 之间(作为 Base64 编码的二进制值 - 最大 8 个字符)。要验证 myPassword$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/

MD5

$ openssl passwd -apr1 -salt r31..... myPassword
$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/

mod_dbd 的数据库密码字段

SHA1 变体可能是 DBD 身份验证最实用的格式。由于 SHA1 和 Base64 函数通常可用,因此其他软件可以填充包含 Apache 基本身份验证可用的加密密码的数据库。

要在各种语言中创建 Apache SHA1 变体基本身份验证密码

PHP

'{SHA}' . base64_encode(sha1($password, TRUE))

Java

"{SHA}" + new sun.misc.BASE64Encoder().encode(java.security.MessageDigest.getInstance("SHA1").digest(password.getBytes()))

ColdFusion

"{SHA}" & ToBase64(BinaryDecode(Hash(password, "SHA1"), "Hex"))

Ruby

require 'digest/sha1'
require 'base64'
'{SHA}' + Base64.encode64(Digest::SHA1.digest(password))

C 或 C++

使用 APR 函数:apr_sha1_base64

Python

import base64
import hashlib
"{SHA}" + format(base64.b64encode(hashlib.sha1(password).digest()))

PostgreSQL(安装了 contrib/pgcrypto 函数)

'{SHA}'||encode(digest(password,'sha1'),'base64')

top

摘要身份验证

Apache 识别一种摘要身份验证密码格式 - 字符串 user:realm:password 的 MD5 哈希,作为 32 个十六进制数字的字符串。realm 是 httpd.conf 中 AuthName 指令的授权域参数。

mod_dbd 的数据库密码字段

由于 MD5 函数通常可用,因此其他软件可以填充包含 Apache 摘要身份验证可用的加密密码的数据库。

要在各种语言中创建 Apache 摘要身份验证密码

PHP

md5($user . ':' . $realm . ':' .$password)

Java

byte b[] = java.security.MessageDigest.getInstance("MD5").digest( (user + ":" + realm + ":" + password ).getBytes());
java.math.BigInteger bi = new java.math.BigInteger(1, b);
String s = bi.toString(16);
while (s.length() < 32)
s = "0" + s; // 字符串 s 是加密的密码

ColdFusion

LCase(Hash( (user & ":" & realm & ":" & password) , "MD5"))

Ruby

require 'digest/md5'
Digest::MD5.hexdigest(user + ':' + realm + ':' + password)

PostgreSQL(安装了 contrib/pgcrypto 函数)

encode(digest( user || ':' || realm || ':' || password , 'md5'), 'hex')

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处发布的评论应针对改进文档或服务器的建议,如果这些建议已实施或被认为无效/与主题无关,则可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表