ये रहा परिदृश्य:
मैंने वेबसाइट पर सदस्यशप लागू करने के लिए डिफ़ॉल्ट 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
।
धन्यवाद।
1 उत्तर
समाधान मिला:
ValidateUser
विधि में, हमें PasswordSalt
को aspnet_Membership
तालिका से प्राप्त करना है, इसे उत्पन्न नहीं करना है!
डमी सवाल। :|
संबंधित सवाल
नए सवाल
asp.net
ASP.NET एक Microsoft वेब अनुप्रयोग विकास ढांचा है जो प्रोग्रामर को गतिशील वेब साइटों, वेब अनुप्रयोगों और वेब सेवाओं के निर्माण की अनुमति देता है। प्रोजेक्ट प्रकार टैग के साथ संयोजन के रूप में इस टैग का उपयोग करना उपयोगी है। [asp.net-mvc], [asp.net-webforms], या [asp.net-web-api]। ASP.NET Core के बारे में प्रश्नों के लिए इस टैग का उपयोग न करें - इसके बजाय [asp.net-core] का उपयोग करें।