ये रहा परिदृश्य:
मैंने वेबसाइट पर सदस्यशप लागू करने के लिए डिफ़ॉल्ट SqlMembershipProvider का उपयोग किया है। अब मैं अपने कस्टम सदस्यता प्रदाता के पास माइग्रेट करना चाहता/चाहती हूं। (FYI करें मेरे द्वारा उपयोग किए जाने वाले प्रावधान CodeFirst Membership Provider हैं।
समस्या यह है कि प्रदाता डीबी में पासवर्ड स्टोर करने के लिए एक कस्टम एन्क्रिप्शन/हैश एल्गोरिदम का उपयोग करता है और मैं प्रत्येक उपयोगकर्ता के लिए नए पासवर्ड उत्पन्न नहीं करना चाहता और उन्हें नया पासवर्ड मेल नहीं करना चाहता हूं।

मैं अपने प्रदाता में डिफ़ॉल्ट सदस्यता पासवर्ड हैशिंग/एन्क्रिप्शन कैसे कार्यान्वित कर सकता हूं। मैंने परावर्तक/गूगल का उपयोग किया और निम्न कोड का प्रयास किया जो SqlMembershipProvider में डिफ़ॉल्ट कार्यान्वयन प्रतीत होता है:

internal static string GenerateSalt()
{
    byte[] buf = new byte[16];
    (new RNGCryptoServiceProvider()).GetBytes(buf);
    return Convert.ToBase64String(buf);
}

internal string EncodePassword(string pass, string salt)
{
    byte[] bIn = Encoding.Unicode.GetBytes(pass);
    byte[] bSalt = Convert.FromBase64String(salt);
    byte[] bAll = new byte[bSalt.Length + bIn.Length];
    byte[] bRet = null;
    Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length);
    Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length);
   HashAlgorithm s = HashAlgorithm.Create("SHA1");
   bRet = s.ComputeHash(bAll);
   return Convert.ToBase64String(bRet);
}

और इसे मेरी ValidateUser विधि में इस्तेमाल किया:

  string salt = GenerateSalt();
  string pass = EncodePassword(enteredPassword, salt);
  bool verificationSucceeded = pass == user.Password;  

लेकिन EncodePassword से लौटाया गया पास उस पास से अलग है जिसे डिफ़ॉल्ट SqlMembershipProvider ने कस्टम सदस्यता पर स्विच करने से पहले डेटाबेस में डाला है। मैं डिफ़ॉल्ट SqlMembershipProvider जैसे सटीक पासवर्ड सत्यापन/पीढ़ी को कैसे कार्यान्वित कर सकता हूं?

नोट: चूंकि मैंने अपने web.config में कोई machinekey परिभाषित नहीं किया है, मुझे यकीन है कि डिफ़ॉल्ट प्रदाता ने Hashed पासवर्ड प्रारूप का उपयोग किया है, न कि Encrypted या Clear

धन्यवाद।

4
Kamyar 24 जुलाई 2011, 00:15

1 उत्तर

सबसे बढ़िया उत्तर

समाधान मिला:

ValidateUser विधि में, हमें PasswordSalt को aspnet_Membership तालिका से प्राप्त करना है, इसे उत्पन्न नहीं करना है!

डमी सवाल। :|

4
Kamyar 24 जुलाई 2011, 00:48
2
एक गूंगा सवाल है जिसे पूछा नहीं जाता है। यदि आप नहीं जानते थे, तो ऐसे कई अन्य लोग भी थे जिन्होंने या तो नहीं किया, जिन्होंने इस प्रश्न की सहायता की।
 – 
Andrew Neely
9 सितंबर 2013, 19:13
1
जैसा कि एंड्रयू ने कहा, मैं आज ही इस पर आया हूं और यह वही था जो मुझे चाहिए था। शुक्रिया।
 – 
ryanulit
6 मार्च 2014, 01:09