दिलचस्प पोस्ट
अग्रणी शून्य को प्रिंट करने के लिए मैं बीसी (1) कैसे प्राप्त करूं? कमांड स्विफ्ट के बाद टर्मिनल आउटपुट प्राप्त करें SQLite रीसेट प्राथमिक कुंजी फ़ील्ड वर्तमान बैचफ़ाइल निर्देशिका प्राप्त करें डाइनेमो डीडी: पीके प्रकार का उपयोग कब किया जाए? कोडिग्नर सक्रिय रिकॉर्ड में सम्मिलित क्वेरी के बाद अंतिम डालें आईडी कैसे प्राप्त करें MySQL में एक ब्लॉब कॉलम में अधिकतम डेटा की अधिकतम लंबाई क्या है? सी ++ क्या यह निर्धारित करना संभव है कि कोई सूचक एक वैध ऑब्जेक्ट को इंगित करता है? एक ही फाइल के लिए इनपुट टाइप = फ़ाइल "बदलें" का पता कैसे लगा सकता है? जावास्क्रिप्ट का उपयोग करके एचटीएमएल चयनित विकल्प कैसे बदल सकता है? WAMP के साथ ईमेल भेज रहा है कैसे सुरक्षित रूप से ES6 नई सुविधाओं का उपयोग करें? जावा के साथ संरचित बाइनरी फ़ाइलों को पढ़ने का सर्वोत्तम तरीका जावा का उपयोग कर फ़ोल्डर में फाइलें ढूंढें इकाई फ़्रेमवर्क: एक विदेशी कुंजी संपत्ति सेट करना

कैसे SQL सर्वर से एक पासवर्ड डिक्रिप्ट करने के लिए?

मुझे यह क्वेरी SQL सर्वर 2000 में है:

select pwdencrypt('AAAA') 

जो 'एएएए' की एक एन्क्रिप्टेड स्ट्रिंग का उत्पादन करती है:

 0x0100CF465B7B12625EF019E157120D58DD46569AC7BF4118455D12625EF019E157120D58DD46569AC7BF4118455D

मैं अपने मूल से आउटपुट (डिक्रिप्ट) को कैसे बदल सकता हूँ (जो 'एएएए' है)?

Solutions Collecting From Web of "कैसे SQL सर्वर से एक पासवर्ड डिक्रिप्ट करने के लिए?"

मेरा मानना ​​है कि pwdencrypt एक हैश का उपयोग कर रहा है ताकि आप वास्तव में हैश स्ट्रिंग रिवर्स नहीं कर सकते – एल्गोरिथ्म इसलिए डिज़ाइन किया गया है इसलिए यह असंभव है

यदि आप उस पासवर्ड की पुष्टि कर रहे हैं जो किसी उपयोगकर्ता ने सामान्य तकनीक में प्रवेश किया है तो उसे हैश करना है और उसके बाद डेटाबेस में हैश किए गए संस्करण की तुलना करना है।

इस तरह से आप एक प्रयोग की गई प्रविष्टि तालिका को सत्यापित कर सकते हैं

 SELECT password_field FROM mytable WHERE password_field=pwdencrypt(userEnteredValue) 

उपयोगकर्ता को बदलें (बड़ा आश्चर्य) के साथ दर्ज किए गए मूल्य उस उपयोगकर्ता द्वारा दर्ज किए गए मान:

SQL सर्वर पासवर्ड हैशिंग एल्गोरिथ्म:

 hashBytes = 0x0100 | fourByteSalt | SHA1(utf16EncodedPassword+fourByteSalt) 

उदाहरण के लिए, "सही घोड़े की बैटरी प्रधान" पासवर्ड को हैश करने के लिए पहले हम कुछ यादृच्छिक नमक उत्पन्न करते हैं:

 fourByteSalt = 0x9A664D79; 

और फिर नमस्कार के साथ पासवर्ड (यूटीएफ -16 में एन्कोडेड) हैश:

  SHA1("correct horse battery staple" + 0x9A66D79); =SHA1(0x63006F007200720065006300740020006200610074007400650072007900200068006F00720073006500200073007400610070006C006500 0x9A66D79) =0x6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 

syslogins तालिका में संग्रहीत मूल्य निम्न के समापन है:

[हेडर] + [नमक] + [हैश]
0x0100 9A664D79 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 0x0100 9A664D79 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 0x0100 9A664D79 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 0x0100 9A664D79 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 0x0100 9A664D79 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 0x0100 9A664D79 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 0x0100 9A664D79 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3

जो आप SQL सर्वर में देख सकते हैं:

 SELECT name, CAST(password AS varbinary(max)) AS PasswordHash FROM sys.syslogins WHERE name = 'sa' name PasswordHash ==== ====================================================== sa 0x01009A664D796EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 
  • संस्करण शीर्षलेख: 0100
  • नमक (चार बाइट्स): 9A664D79
  • हैश: 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 (SHA-1 20 बाइट्स हैं, 160 बिट्स)

मान्यकरण

आप उसी हैश को निष्पादित करके एक पासवर्ड को मान्य करते हैं:

  • सहेजे गए पासवर्डहाश से नमक ले लो: 0x9A664D79

और फिर से हैश प्रदर्शन:

 SHA1("correct horse battery staple" + 0x9A66D79); 

जो एक ही हैश पर आ जाएगा, और आप जानते हैं कि पासवर्ड सही है।

क्या एक बार अच्छा था, लेकिन अब कमजोर है

हैशिंग एल्गोरिथ्म SQL सर्वर 7 के साथ पेश की, 1999 में, 1999 के लिए अच्छा था।

  • यह अच्छा है कि पासवर्ड हैश नमकीन
  • इसे प्रीपेड करने के बजाय पासवर्ड में नमक जोड़ना अच्छा है

लेकिन आज यह बाहर-तिथि है यह केवल एक बार हैश चलाता है, जहां यह जानवरों के बल के हमलों को विफल करने के लिए कुछ हज़ार बार चलाना चाहिए।

वास्तव में, माइक्रोसॉफ्ट के बेसलाइन सुरक्षा विश्लेषक, यह जांच के भाग के रूप में, ब्रूटफोर्स पासवर्ड की कोशिश करेगा। यदि यह किसी भी अनुमान लगाता है, तो यह पासवर्ड को कमजोर बताता है। और यह कुछ मिलता है

ब्रूट फोर्सिंग

कुछ पासवर्ड जांचने में आपकी सहायता के लिए:

 DECLARE @hash varbinary(max) SET @hash = 0x01009A664D796EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 --Header: 0x0100 --Salt: 0x9A664D79 --Hash: 0x6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 DECLARE @password nvarchar(max) SET @password = 'password' SELECT @password AS CandidatePassword, @hash AS PasswordHash, --Header 0x0100 + --Salt CONVERT(VARBINARY(4), SUBSTRING(CONVERT(NVARCHAR(MAX), @hash), 2, 2)) + --SHA1 of Password + Salt HASHBYTES('SHA1', @password + SUBSTRING(CONVERT(NVARCHAR(MAX), @hash), 2, 2)) 

SQL सर्वर 2012 और SHA-512

SQL सर्वर 2012 के साथ शुरू, माइक्रोसॉफ्ट SHA-2 512-bit का उपयोग करने के लिए स्विच किया गया:

 hashBytes = 0x0200 | fourByteSalt | SHA512(utf16EncodedPassword+fourByteSalt) 

संस्करण उपसर्ग को 0x0200 :

 SELECT name, CAST(password AS varbinary(max)) AS PasswordHash FROM sys.syslogins name PasswordHash ---- -------------------------------- xkcd 0x02006A80BA229556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38 
  • संस्करण: 0200 (SHA-2 256-बिट)
  • नमक: 6A80BA22
  • हैश (64 बाइट्स): 9556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38 2 9556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38

इसका मतलब है कि हम नमक प्रत्यय के साथ, यूटीएफ -16 एन्कोडेड पासवर्ड को हैंश करते हैं:

  • SHA512 ( "सही घोड़े की बैटरी प्रधान" + 6A80BA22 )
  • SHA512 ( 63006f0072007200650063007400200068006f0072007300650020006200610074007400650072007900200073007400610070006c006500 + 6A80BA22 )
  • 9556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38

आपको पता है कि आप भविष्य के लिए अपनी पीठ के लिए एक छड़ी बना सकते हैं। Pwdencrypt () और pwdcompare () undocumented फ़ंक्शन हैं और SQL सर्वर के भविष्य के संस्करणों में ऐसा व्यवहार नहीं कर सकते हैं।

क्यों डीएच को मारने से पहले उम्मीदवार एल्गोरिथम का उपयोग कर पासवर्ड SHA-2 या बेहतर नहीं है?

आप वास्तव में डी-एन्क्रिप्ट करने वाले पासवर्ड नहीं होने चाहिए।

आपको अपने आवेदन में दर्ज किए गए पासवर्ड को एन्क्रिप्ट करना चाहिए और डेटाबेस से एन्क्रिप्टेड पासवर्ड के साथ तुलना करना चाहिए।

संपादित करें – और अगर ऐसा इसलिए है क्योंकि पासवर्ड भूल गया है, तो एक तंत्र को एक नया पासवर्ड बनाने के लिए सेटअप करें

आप इस पासवर्ड को फिर से डिक्रिप्ट नहीं कर सकते, लेकिन "pwdcompare" नामक एक और विधि है। यहां एक उदाहरण है कि इसे SQL वाक्यविन्यास के साथ कैसे उपयोग करें:

 USE TEMPDB GO declare @hash varbinary (255) CREATE TABLE tempdb..h (id_num int, hash varbinary (255)) SET @hash = pwdencrypt('123') -- encryption INSERT INTO tempdb..h (id_num,hash) VALUES (1,@hash) SET @hash = pwdencrypt('123') INSERT INTO tempdb..h (id_num,hash) VALUES (2,@hash) SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 2 SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison SELECT * FROM tempdb..h INSERT INTO tempdb..h (id_num,hash) VALUES (3,CONVERT(varbinary (255), 0x01002D60BA07FE612C8DE537DF3BFCFA49CD9968324481C1A8A8FE612C8DE537DF3BFCFA49CD9968324481C1A8A8)) SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 3 SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison SELECT * FROM tempdb..h DROP TABLE tempdb..h GO 

एक त्वरित गूगल इंगित करता है कि pwdencrypt () नियतात्मक नहीं है, और आपके कथन का चयन करें pwdencrypt ('एएएए') मेरे स्थापना पर एक अलग मान देता है!

यह लेख भी देखें http://www.theregister.co.uk/2002/07/08/cracking_ms_sql_server_passwords/