2008-10-17 8 views
8

मेरा विन फॉर्म ऐप प्रपत्र प्रमाणीकरण की तरह प्रतीत नहीं होता है, मैं हैशिंग के लिए बिल्कुल नया हूं इसलिए इसे बदलने में कोई मदद बहुत स्वागत है। धन्यवाद।सी # विंडोज ऐप में पासवर्ड हैशिंग, अनुपस्थित एएसपी.नेट के फॉर्म प्रमाणीकरण?

//Write hash 
protected TextBox tbPassword; 
protected Literal liHashedPassword; 

{ 
    string strHashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(tbPassword.Text, "sha1"); 
    liHashedPassword.Text = "Hashed Password is: " + strHashedPassword;  
} 

//read hash 
string strUserInputtedHashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(tbPassword.Text, "sha1"); 
if(strUserInputtedHashedPassword == GetUsersHashedPasswordUsingUserName(tbUserName.Text)) 
{ 
    // sign-in successful 
} 
else 
{ 
    // sign-in failed 
} 
+0

पर किसी ऐप है कि उपयोगकर्ताओं को उपयोगकर्ता के प्रवेश की तुलना में अलग साख निर्दिष्ट करने के लिए अनुमति देता है लक्ष्य:

यहाँ एक सुरक्षित फैशन में आप क्या चाहते करने के लिए एक एपीआई है? अन्य सेवाओं तक पहुंचने के लिए उपयोग के लिए प्रमाण पत्र प्राप्त करने के लिए? मुझे यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं। – tvanfosson

उत्तर

1

मुझे लगता है कि इसे काम करना चाहिए। आपको बस इतना करना है कि आपके कोड में System.Web.Security (और इसे अपने विजुअल स्टूडियो प्रोजेक्ट में संदर्भ के रूप में जोड़ें)।

3

प्रपत्र प्रमाणीकरण System.Web.Security नामस्थान में परिभाषित किया गया है जो System.Web.dll असेंबली में है।

सिर्फ इसलिए कि आप WinForm ऐप लिख रहे हैं, आपको उस नामस्थान का उपयोग करने या उस असेंबली का संदर्भ देने से नहीं रोकता है; वे डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से नहीं किए जाते हैं क्योंकि वे वेबफॉर्म ऐप के लिए होंगे।

22
using System.Security.Cryptography; 

public static string EncodePasswordToBase64(string password) 
{ byte[] bytes = Encoding.Unicode.GetBytes(password); 
    byte[] inArray = HashAlgorithm.Create("SHA1").ComputeHash(bytes); 
    return Convert.ToBase64String(inArray); 
} 
+1

बहुत साफ - मैंने अपने दो कार्यान्वयन का परीक्षण किया और आपका थोड़ा तेज है .. 100,000 पुनरावृत्तियों पर 50 मिमी तेज है, इसलिए मैं इसे ऊपर उठा रहा हूं :) –

+0

ध्यान रखें कि SHA1 (स्पष्ट रूप से) तेज़ है, लेकिन SHA256 से कम सुरक्षित होगा । अधिक जानकारी के लिए http://en.wikipedia.org/wiki/SHA256 देखें –

+1

@JarrodDixon: इसके विपरीत। पासवर्ड के लिए, आप _slower_ हैश चाहते हैं। – SLaks

1

आप वास्तव में 'जहाज' के लिए है, तो इस एप्लिकेशन का निर्माण करती है, हो सकता है जोड़ने System.Web.Security इस तरह के एक अच्छा विचार नहीं है ...

आप एक SHA1 हैश की जरूरत है, नहीं है एमएसडीएन पर उदाहरणों के साथ .net क्रिप्टोग्राफी लाइब्रेरी का उपयोग करना बहुत आसान है। कुंजी के लिए

  1. ले क्या आप एन्क्रिप्ट करने के लिए
  2. यह बारी जो भी एन्कोडिंग (ascii, utf *) के लिए बाइट्स में आप
  3. उपयोग करने के लिए नेट के लिए builtin कई हैशिंग योजनाओं में से एक का उपयोग कर रहे चाहते है टुकड़ों में बंटी बाइट्स
  4. उन बाइट्स वापस एक स्ट्रिंग में समान कूट में चरण 2
  5. सहेजें जिसके परिणामस्वरूप टुकड़ों में बांटा स्ट्रिंग में के रूप में बाद में तुलना के लिए बारी कहीं जाना

//step 1 and 2 
byte[] data = System.Text.Encoding.Unicode.GetBytes(tbPassword.Text,); 
byte[] result; 

//step 3 
SHA1 sha = new SHA1CryptoServiceProvider(); 
result = sha.ComputeHash(data); 

//step 4 
string storableHashResult = System.Text.Encoding.Unicode.ToString(result); 

//step 5 
    // add your code here 
+0

स्पष्ट "यह WinForms ऐप्स के लिए नहीं है" के अलावा, क्या कोई कारण है कि System.Web। * इतना अच्छा विचार नहीं है? – JasonS

+1

मुझे http://www.west-wind.com/Weblog/posts/617930 पर रिक स्ट्राल द्वारा एक पोस्ट की याद दिलाता है।एएसपीएक्स 1. यह सही "महसूस" नहीं करता है। 2. यह लाइब्रेरी उपभोग करने वाले किसी भी एप्लिकेशन की लोड की गई असीमित सूची में System.Web को मजबूर करता है। 3. यह इसे लोड करने के लिए मेमोरी पदचिह्न में 2.5 मेग्स जोड़ता है। 4. आदि (कमरे से बाहर) – Ted

1

क्या आप "x2" लूप के बजाय बिटकॉन्टर फ़ंक्शन का उपयोग नहीं कर सकते?

उदा।

रिटर्न बिटकोनवर्टर। टॉस्ट्रिंग (हैश)। जगह ("-", "");

2

यदि आप उपयोगकर्ता प्रमाण-पत्रों के लिए हैशिंग का उपयोग कर रहे हैं तो मेरा सुझाव है कि आप केवल हैशिंग से अधिक करें, आप आदर्श रूप से कुंजी खींचना चाहते हैं।

https://sourceforge.net/projects/pwdtknet/

+0

मुझे वहां कोई भी स्रोत कोड नहीं दिखाई देता है। सुनिश्चित नहीं है कि कोई भी अपने पासवर्ड पर भरोसा करने जा रहा है। डीएलएल को वे कुछ भी नहीं जानते हैं। –

+0

स्रोत "स्रोत" नामक फ़ोल्डर में फाइल क्षेत्र में है। आपके द्वारा वर्णित कारण के लिए स्रोत प्रदान किया जाता है। यहां स्रोत फ़ोल्डर का एक लिंक है http://sourceforge.net/projects/pwdtknet/files/Source/ – thashiznets

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