Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर से पासवर्ड कैसे डिक्रिप्ट करें?

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

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

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

fourByteSalt = 0x9A664D79;

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

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

syslogins . में संग्रहीत मान तालिका का संयोजन है:

<ब्लॉकक्वॉट>

[हेडर] + [नमक] + [हैश]
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 बिट)

सत्यापन

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

  • सेव किए गए PasswordHash . से नमक लें :0x9A664D79

और फिर से हैश करें:

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

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

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

1999 में SQL Server 7 के साथ पेश किया गया हैशिंग एल्गोरिथम 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 से शुरू होकर, Microsoft ने SHA-2 512-बिट का उपयोग करना शुरू कर दिया:

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

इसका मतलब है कि हमारे पास नमक प्रत्यय के साथ UTF-16 एन्कोडेड पासवर्ड हैश:

  • SHA512("सही हॉर्स बैटरी स्टेपल" +6A80BA22 )
  • SHA512(63006f0072007200650063007400200068006f0072007300650020006200610074007400650072007900200073007400610070006c006500 + 6A80BA22 )
  • 9556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर इंडेक्स बैकवर्ड स्कैन:अंडरस्टैंडिंग, ट्यूनिंग

  2. वेतन तालिका से तीसरा या शून्य अधिकतम वेतन कैसे प्राप्त करें?

  3. SQL सर्वर में सम्मिलित करने का प्रयास करते समय "वर्चर मान को परिवर्तित करते समय रूपांतरण विफल" ठीक करें

  4. चयन कथनों में NOLOCK संकेत का प्रभाव

  5. पता करें कि SQL सर्वर (T-SQL) में ईमेल भेजने में विफल क्यों है