使用 mysql 生成 apache 兼容密碼
我目前正在遷移舊的網路伺服器。
舊伺服器使用儲存在 mysql 表中並
mod_auth_mysql
啟用的使用者的基本身份驗證。密碼儲存在 apaches 的 sha1 函式
SELECT sha1('secret')
中,適用於mod_auth_mysql
不幸
mod_auth_mysql
的是不再支持。這就是為什麼我找到mod_authn_dbd
了替代方案。https://documentation.help/httpd-2.4-es/mod_authn_dbd.html
我已經設法讓所有東西都啟動並執行,直到我可以使用基本身份驗證和固定密碼登錄為止
<Location /> AuthType Basic AuthName "Test" AuthBasicProvider dbd Require valid-user AuthDBDUserPWQuery "SELECT '{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=' FROM users WHERE user = %s" </Location>
我只將 sha1 雜湊儲存在使用者表中。雖然由 mysql ( ) mod_authn_dbd 生成的舊
mod_auth_mysql
接受的雜湊SELECT sha1('test')=a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
沒有。根據https://documentation.help/httpd-2.4-es/password_encryptions.html
SHA1 “{SHA}” + Base64 編碼的密碼 SHA-1 摘要。
接受 htpasswd 生成的密碼。
htpasswd -bns user test user:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=
現在我需要將此值
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
(儲存在我的數據庫中用於密碼測試)轉換qUqP5cyxm6YcTAhz05Hph5gvu9M=
為 mysql 內部的(密碼測試的接受值)我已經試過了
SELECT to_base64(sha1('test')), to_base64(ucase(sha1('test'))), to_base64(lcase(sha1('test')));`
但沒有一個產生預期的結果。
我要麼需要一種方法將我現有的密碼雜湊轉換為預期的格式,要麼說服
mod_authn_dbd
我接受我現有的 sha1 雜湊。任何幫助,將不勝感激
您用 PHP 範例回答了您自己的問題。PHP 中的 pack() 函式將二進制數據的十六進製表示(SHA-1 雜湊通常顯示為人類可讀)轉換為其原始二進制(非人類可讀)形式。您需要針對您生成的這種二進制形式的 SHA-1 雜湊執行 to_base64(),如下所示:
mysql> SELECT to_base64(unhex(sha1('test'))); +--------------------------------+ | to_base64(unhex(sha1('test'))) | +--------------------------------+ | qUqP5cyxm6YcTAhz05Hph5gvu9M= | +--------------------------------+ 1 row in set (0.00 sec)
在這種情況下,您將僅使用 MySQL 獲得所需的輸出。