https://crackstation.net/hashing-security.htm
जैसा कि मैंने अपनी टिप्पणियों में कहा है, हैशिंग पासवर्ड कुछ ऐसा है जो आपको शायद स्वयं नहीं करना चाहिए।
ध्यान देने योग्य कुछ बातें:
- पासवर्ड के लिए SHA1 अनुशंसित नहीं है
- पासवर्ड नमकीन होने चाहिए
- अपना खुद का बनाने की कोशिश करने के बजाय आपको एक सत्यापित यूजरस्टोर फ्रेमवर्क का उपयोग करना चाहिए, क्योंकि आप संभवतः "इसे गलत करेंगे"
- मुझे यकीन है कि और भी बहुत कुछ हैं
ऐसा कहा जा रहा है , अपने विशिष्ट प्रश्न को पूरा करने के लिए, आप कुछ इस तरह चाहेंगे:
Users
----
userId
passwordHashed
पासवर्डहैशेड उपयोगकर्ता के पासवर्ड का हैशेड संस्करण संग्रहीत करता है (सादा पाठ पासवर्ड कभी भी दृढ़ता में कहीं भी संग्रहीत नहीं होता है।)
वैध पासवर्ड की जाँच के लिए कुछ इस तरह किया जाता है:
ALTER procedure [dbo].[proc_UserLogin]
@userid varchar(20),
@password nvarchar(50)
As
declare
@ReturnVal varchar(500)
SET NOCOUNT ON
if exists(select userid,password from LoginManager where [email protected] and password=HASHBYTES('SHA1', @password))
set @ReturnVal='0|Logged in Successfully'
else
set @ReturnVal='1|Login Failed/Username does not exist'
select @ReturnVal
उपयोगकर्ता पासवर्ड डालने/अपडेट करने के लिए, आपको यह सुनिश्चित करने की ज़रूरत है कि हैशेड पासवर्ड को प्लेन टेक्स्ट पासवर्ड के बजाय स्टोर किया जाए;
INSERT INTO users(userId, passwordHashed)
VALUES (@userId, HASHBYTES('SHA1', @rawPassword)
या
UPDATE users
SET passwordHased = HASHBYTES('SHA1', @rawPassword)
WHERE userId = @userId
संपादित करें:
बस एहसास हुआ कि आप पूछ रहे हैं कि सी # में हैश को कैसे पूरा किया जाए, एसक्यूएल नहीं। आप निम्न कार्य कर सकते हैं (हैशिंग विद SHA1 सी# . में एल्गोरिदम ):
public string Hash(byte [] temp)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(temp);
return Convert.ToBase64String(hash);
}
}
आपका कोड स्निपेट हो सकता है:
conn.Open();
string query = "EXEC dbo.proc_UserLogin'" + username.Text+ "', '" + this.Hash(System.Text.Encoding.UTF8.GetBytes(password.Text))+"'";
OleDbCommand cmd = new OleDbCommand(query, conn);
आपको यह भी ध्यान रखना चाहिए कि आपको अपने पैरामीटर को अपनी संग्रहीत कार्यविधि में पैरामीटराइज़ करना चाहिए बजाय इसके कि आप उन्हें वैसे ही पास करें - जो ऐसा लगता है कि इसके संबंध में आपके पास पहले से ही एक अलग प्रश्न है।