<-
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。不安全。

使用 chtpasswd 產生值

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 密碼的鹽值是前兩個字元(轉換為二進位值)。要驗證 myPassword 符合 rqXexS6ZhobKA

CRYPT

$ openssl passwd -crypt -salt rq myPassword
警告:將密碼截斷為 8 個字元
rqXexS6ZhobKA

請注意,使用 myPasswo 而非 myPassword 會產生相同的結果,因為 CRYPT 密碼只會考慮前 8 個字元。

MD5 密碼的鹽介於 $apr1$ 與後面的 $ 之間(作為 Base64 編碼的二進位值 - 最多 8 個字元)。若要針對 $apr1$r31.....$HqJZimcKQFAMYayBlzkrA/ 驗證 myPassword,執行以下動作:

MD5

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

供 mod_dbd 使用的資料庫密碼欄位

SHA1 變體可能是 DBD 身分驗證最實用的格式。由於 SHA1 和 Base64 函式非常普遍,其他軟體可以使用 Apache 基本身分驗證可用的已加密密碼填充資料庫。

在各種語言中建立 Apache SHA1-variant 基本身分驗證密碼

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 伺服器的操作相關問題,請在 Libera.chat 上的 IRC 頻道第 #httpd 提問,或寄送電子郵件至我們的 寄件清單