mysql के साथ अपाचे संगत पासवर्ड उत्पन्न करें

Aug 17 2020

मैं वर्तमान में एक पुराने वेबसर्वर को स्थानांतरित करने की प्रक्रिया में हूं।

पुराने सर्वर एक mysql तालिका में संग्रहीत उपयोगकर्ताओं के साथ मूल mod_auth_mysqlसक्षम का उपयोग करता है और सक्षम होता है।

पासवर्ड ist के साथ संग्रहित है जो कि Ap1 में बनाया गया है SELECT sha1('secret')जो कि कार्य करता हैmod_auth_mysql

दुर्भाग्य से mod_auth_mysqlअब समर्थित नहीं है। इसलिए मैंने mod_authn_dbdविकल्प के रूप में पाया ।

https://documentation.help/httpd-2.4-es/mod_authn_dbd.html

मैं alreay सब कुछ पाने के लिए और इस बिंदु तक चलने में कामयाब रहा कि मैं मूल स्रोत और एक निश्चित पासवर्ड के साथ लॉगिन कर सकता हूं

<Location />
        AuthType Basic
        AuthName "Test"
        AuthBasicProvider dbd
        Require valid-user
        AuthDBDUserPWQuery "SELECT '{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=' FROM users WHERE user = %s"
</Location>

मैं केवल उपयोगकर्ता तालिका में sha1 हैश को संग्रहीत करता हूं। जबकि mod_auth_mysqlmysql ( SELECT sha1('test')=a94a8fe5ccb19ba61c4c0873d391e987982fbbd3) mod_authn_dbd द्वारा निर्मित पुरानी स्वीकृत हैश नहीं है।

के अनुसार https://documentation.help/httpd-2.4-es/password_encryptions.html

SHA1 "{SHA}" + पासवर्ड से Base64- एन्कोडेड SHA-1 डाइजेस्ट।

Htpasswd द्वारा उत्पन्न पासवर्ड स्वीकार किए जाते हैं।

htpasswd -bns user test
user:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

अब मुझे mysql के अंदर इस मान a94a8fe5ccb19ba61c4c0873d391e987982fbbd3(पासवर्ड परीक्षण के लिए मेरे db में संग्रहीत) qUqP5cyxm6YcTAhz05Hph5gvu9M=(पासवर्ड परीक्षण के लिए स्वीकृत मूल्य ) को बदलने की आवश्यकता है

मैंने पहले ही कोशिश की

SELECT to_base64(sha1('test')), to_base64(ucase(sha1('test'))), to_base64(lcase(sha1('test')));`

लेकिन कोई भी अपेक्षित परिणाम नहीं देता है।

मुझे या तो अपने मौजूदा पासवर्ड हैश को अपेक्षित प्रारूप में बदलने की ज़रूरत है या mod_authn_dbdअपने मौजूदा sha1 हैश को स्वीकार करने के लिए मना लेना चाहिए।

किसी भी सहायता की सराहना की जाएगी

जवाब

1 Rouben Aug 17 2020 at 21:27

आपने PHP उदाहरण के साथ अपने स्वयं के प्रश्न का उत्तर दिया। PHP में पैक () फ़ंक्शन बाइनरी डेटा के हेक्साडेसिमल अभ्यावेदन (जो कि 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 के साथ वांछित आउटपुट मिलेगा।

JürgenSteinblock Aug 17 2020 at 21:07

यह मेरे सवाल का सीधा जवाब नहीं है, लेकिन एक वर्कअराउंड हो सकता है मुझे एक ब्लॉग पोस्ट मिली जहां कोई एक ही समस्या में भाग गया।

http://nileshbansal.blogspot.com/2008/06/password-encryption-mysql-apache-and.html

टिप्पणियों में php के साथ htpasswd संगत हैश बनाने के लिए एक लिंक है। मैंने पुष्टि की कि यह htpasswd -bnsकमांड के समान परिणाम देता है

function sha1_to_htpasswd ( $user, $sha )
{
return $user . ':{SHA}' . base64_encode( pack( "H" . strlen( $sha ), $sha ) );
}

अगर किसी को भी एक बेहतर समाधान नहीं पता है (सिर्फ mysql और php के बिना) तो मैं अपने यूजर टेबल को एक कॉलम के साथ बढ़ाता हूँ जहाँ पासवर्ड को इस तरह स्टोर किया जाता है। थोड़ा बेमानी लेकिन यह काम करना चाहिए।