2008-12-05 12 views
7

मैं एएसपी.नेट एमवीसी में एक PHP वेब साइट को फिर से लिख रहा हूं। मैं एक ही उपयोगकर्ता आधार को बनाए रखना चाहता हूं लेकिन PHP क्रिप्ट() फ़ंक्शन का उपयोग करके पासवर्ड धोए गए हैं। मुझे .NET में एक ही फ़ंक्शन की आवश्यकता है ताकि मैं लॉगिन पर पासवर्ड रख सकूं और उपयोगकर्ता डेटाबेस में हैश किए गए पासवर्ड के विरुद्ध जांच सकूं। इस मामले मेंPHP क्रिप्ट() फ़ंक्शन .Net में?

तहखाने CRYPT_MD5 कार्यान्वयन उपयोग कर रहा है - हैश सभी $ 1 $

मैं आस्ट्रेलिया का एक पक्षी की कोशिश की है के साथ शुरू लेकिन यह तहखाने समारोह के MD5 कार्यान्वयन नहीं है।

क्या किसी को भी नेट में पता है? कोडप्रोजेक्ट पर क्रिप्ट() का सी # उदाहरण डीईएस का उपयोग करता है, एमडी 5 नहीं।

मैंने सी # में निम्नलिखित कोड का प्रयास किया है, नमक + पासवर्ड, पासवर्ड + नमक और नमक के अलग-अलग क्रमशः $ 1 $ उपसर्ग और $ प्रत्यय के बिना। कोई भी पीएचपी के रूप में एक ही परिणाम देता है:

static void Main(string[] args) 
{ 
    const string salt = "somesalt"; 
    const string password = "fubar"; 
    const string plaintextString = password + salt; 
    byte[] plaintext = GetBytes(plaintextString); 
    var md5 = MD5.Create("MD5"); 
    byte[] hash = md5.ComputeHash(plaintext); 
    string s = System.Convert.ToBase64String(hash); 
    Console.WriteLine("Hash of " + password + " is " + s); 
    Console.ReadKey(); 
} 

private static byte[] GetBytes(string s) 
{ 
    var result = new byte[s.Length]; 
    for (int i = 0; i < s.Length; i++) 
     result[i] = (byte)s[i]; 
    return result; 
} 
+0

MD5 यह रिटर्न एक सुरक्षित हैश नहीं माना जाता है कॉल करने के लिए था और आप करने के लिए अपने सिस्टम का उन्नयन करना चाह सकते हैं SHA-256। – TravisO

+0

बीटीडब्ल्यू, 'कंसोल।WriteLine ("{0} का हैश {1}" है, पासवर्ड, एस); ' – abatishchev

+1

अबतिशचेव, यह जांचने के लिए एक त्वरित स्पाइक था कि क्या मैं एक दिए गए इनपुट स्ट्रिंग के लिए PHP के रूप में एक ही हैश उत्पन्न कर सकता हूं। आपकी टिप्पणी पूरी तरह से ऑफ-विषय और सहायक से कम है। –

उत्तर

0

एकमात्र समाधान मैंने पाया एक छोटी सी PHP स्क्रिप्ट कि बस इनपुट स्ट्रिंग के हैश करता है और :-(

2

वहाँ md5 हैशिंग के लिए कुछ नेट तरीके हैं, System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, format), सबसे आसान उपयोग करने के लिए है, भले ही यह एक कौर है। प्रारूप के माध्यम से बस "md5" पास करें।

PHP यह कैसे कर रहा है इस पर निर्भर करता है, यह इसे आयात करते समय हैश की शुरुआत से $1$ को बंद करने के समान सरल हो सकता है। यह अधिक जटिल हो सकता है। यदि आप एक उदाहरण पासवर्ड/हैश पोस्ट कर सकते हैं, तो मैं देखूंगा कि मैं कुछ सी # के साथ आ सकता हूं जो आपके लिए उस पासवर्ड से एक ही हैश उत्पन्न करता है।

+0

मैंने .NET में MD5 हैशिंग को आजमाया है, लेकिन इसका परिणाम PHP क्रिप्ट() का उपयोग करके मैं देख रहा हूं उससे अलग हैश –

1

क्या आपने .NET MD5 class पर एक नज़र डाली है? $ 1 $ एक 12 वर्ण नमक का हिस्सा है।

0

मैं वर्तमान में बिल्कुल वैसा ही इस मुद्दे पर काम कर रहा हूँ।

[DllImport("php5ts.dll", EntryPoint = "crypt", CharSet = CharSet.Ansi)] 
private static extern string crypt(string str, string salt); 

यह PHP संस्करण 5.2.10 के लिए अच्छी तरह से काम करता है जब स्थानीय webdev सर्वर चल रहा, IIS5 और IIS6 लेकिन अगर आप II7 का उपयोग करें: समाधान मैं के साथ आया एक निर्वासन कॉल के माध्यम से सीधे php समारोह कॉल करने के लिए था ASP.Net कार्यकर्ता प्रक्रिया एक अनचाहे अपवाद के साथ दुर्घटनाग्रस्त हो जाती है। (जैसे ही मुझे कोई रिज़ॉल्यूशन मिल जाएगा, मैं अपने उत्तर को अपडेट कर दूंगा)

हम सभी नए उपयोगकर्ताओं के लिए .Net MD5 कार्यान्वयन का उपयोग करने और मौजूदा उपयोगकर्ताओं को बिना अपडेट किए जाने के लिए एक पासवर्ड प्रकार ध्वज भी शामिल कर रहे हैं विवरण।

अद्यतन: IIS7 से सीधे php5ts.dll संदर्भित के साथ इस मुद्दे की संभावना सबसे अधिक 64 बिट विंडोज़ का उपयोग करने के लिए बंद हो गया है, तो यह समाधान एक 32 बिट Windows 7 या Server 2008 स्थापना पर काम कर सकते हैं, हालांकि मैं असमर्थ हूँ इसे सत्यापित करने के लिए। चूंकि यह पता चला कि हमारी मौजूदा साइट डीईएस का उपयोग कर रही थी, इसलिए हम कोडप्रोजेक्ट से क्रिप्ट कार्यान्वयन का उपयोग करने में सक्षम थे, संदर्भ माइक के लिए धन्यवाद।

संबंधित मुद्दे