Mysql

使用 mysql 生成 apache 兼容密碼

  • August 18, 2020

我目前正在遷移舊的網路伺服器。

舊伺服器使用儲存在 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 獲得所需的輸出。

引用自:https://serverfault.com/questions/1030430