PDA

View Full Version : مبتدی: متد get hash در اشيا به چه دردي ميخورد



milad.biroonvand
سه شنبه 18 اسفند 1388, 23:11 عصر
سلام دوستان

بعضي از اشيا متد get hashcode دارند ، حالا از اين متد چه استفاده اي ميشه ؟

amin_iman82
چهارشنبه 19 اسفند 1388, 18:06 عصر
کد hash یک رشته رو تولید میکنه.
تا جایی که من متوجه شدم برای رمز نگاری ازش استفاده میشه. فکر کنم برای هر رشته کد منحصر به فردی تولید میکنه.

اگه دوستان اطلاعات بیشتری دارن ممنون میشم در اختیار من و بقیه بذارن. ممنون.

این سمپل داخل www.MSDN2.com بود



Imports System
Imports Microsoft.VisualBasic

Module GetHashCode

Sub Main()
Console.WriteLine( _
"This example of String.GetHashCode( ) " & _
"generates the following output." & vbCrLf)

DisplayHashCode("")
DisplayHashCode("a")
DisplayHashCode("ab")
DisplayHashCode("abc")
DisplayHashCode("abd")
DisplayHashCode("abe")
DisplayHashCode("abcdef")
DisplayHashCode("abcdeg")
DisplayHashCode("abcdeh")
DisplayHashCode("abcdei")
DisplayHashCode("Abcdeg")
DisplayHashCode("Abcdeh")
DisplayHashCode("Abcdei")
End Sub 'Main

Sub DisplayHashCode(Operand As String)

Dim HashCode As Integer = Operand.GetHashCode()
Console.WriteLine( _
"The hash code for ""{0}"" is: 0x{1:X8}, {1}", _
Operand, HashCode)

End Sub 'DisplayHashCode
End Module 'GetHashCode

' This example of String.GetHashCode( ) generates the following output.
'
' The hash code for "" is: 0x00001505, 5381
' The hash code for "a" is: 0x0002B5C4, 177604
' The hash code for "ab" is: 0x00596E26, 5860902
' The hash code for "abc" is: 0x0B873285, 193409669
' The hash code for "abd" is: 0x0B873282, 193409666

hero4000
چهارشنبه 19 اسفند 1388, 18:23 عصر
اين متد همانطوري که دوستمون گفت متنها را به يک عدد تبديل ميکنه که بايد دقت شود که اين خاصيت

يکطرفه است و نميتوان از کد بوجود اومده متن رو بدست آورد

و فقط به درد وقتي ميخوره که بخواي مثلا پسورد ورودي اوليه رو با اين متد تبديل کني و در بانک ذخيره

کني حالا وقتي که بخواي رمز ورودي کاربر رو چک کني کافيه که رمز رو با اين متد تبديل کني و ببيني معادل

همون متن اولي هستش يا نه

اگه توضيحات کامل نبود بپرسيد تا کاملترش کنم

milad.biroonvand
یک شنبه 14 فروردین 1390, 17:33 عصر
اين متد همانطوري که دوستمون گفت متنها را به يک عدد تبديل ميکنه که بايد دقت شود که اين خاصيت

يکطرفه است و نميتوان از کد بوجود اومده متن رو بدست آورد

و فقط به درد وقتي ميخوره که بخواي مثلا پسورد ورودي اوليه رو با اين متد تبديل کني و در بانک ذخيره

کني حالا وقتي که بخواي رمز ورودي کاربر رو چک کني کافيه که رمز رو با اين متد تبديل کني و ببيني معادل

همون متن اولي هستش يا نه

اگه توضيحات کامل نبود بپرسيد تا کاملترش کنم

خوب ، پسورد را از دیتابیس گرفتیم ، حالا چطور ، کاری کنیم که پسورد داخل دیتابیس رو با این متد مطابقت بدیم و پسورد هش شده رو اعتبار سنجی کنیم .

milad.biroonvand
یک شنبه 14 فروردین 1390, 17:36 عصر
مر30 فهمیدم ، یعنی اینکه کاربر می زنه مثلا 1234 تو دیتابیس 1234569abcdef براش ذخیره می شه ، حالا دوباره که کاربر 1234 وارد کرد ، پسورد 123 رو به هش تبدیل می کنیم ، که بصورت 1234569abcdef در میاد ، می گیم اگر مثلا هم بودند پس پسورد درست است و اگر نه پسورد غلط است .

همین منظورتون است درسته ؟

اگر کسی کاربرد دیگری هم از این متد داره اینجا مطرح کنه .

son89412138
شنبه 19 اسفند 1391, 13:01 عصر
سلام من ميخوام كه عملگر== روoverload كنم ميگه بايد gethashcode() رولغوكني ميخوام علتش روبدونم كسي ميتونه جواب بده

the king
شنبه 19 اسفند 1391, 19:41 عصر
سلام دوستان

بعضي از اشيا متد get hashcode دارند ، حالا از اين متد چه استفاده اي ميشه ؟


سلام من ميخوام كه عملگر== روoverload كنم ميگه بايد gethashcode() رولغوكني ميخوام علتش روبدونم كسي ميتونه جواب بده

لغو کنی نه، وقتی == رو پیاده سازی کردید gethashcode رو هم پیاده سازی کنید.
وقتی شما مفهوم == یا Equals رو در مورد خاصی تغییر می دهید، مفهوم HashCode هم در اون مورد خاص
تغییر می کنه، باید خودتون مشخص کنید که HashCode اون شیء بر اساس مقادیر چه مشخصه هایی
تعیین میشه، همانطور که در مورد == یا Equals اینکار رو انجام داده اید.

HashCode یک مقدار عددی ئه که باید بر اساس مقدار داخل شی تعیین بشه.
اگر مقدار دو شی با هم برابر اند، باید HashCode شون هم با هم برابر باشند و اگر مقدار دو شیء
برابر نیستند HashCode شون به احتمال زیاد با هم فرق می کند. به احتمال زیاد، چون محدوده عددی
HashCode خیلی زیاد نیست. اگر مقدار HashCode دو شیء با هم فرق می کنند قطعا آن دو شیء
برابر نیستند.

اگه متد GetHashCode درست و بهینه پیاده سازی بشه، می تونه کمک می کنه که به سرعت
اشیاء مختلف رو از هم تفکیک کنند یا موارد مشابه رو پیدا کنند. چون طبیعتا مقایسه مقدار
دو عدد می تونه خیلی سریعتر از مقایسه چندین مقدار داده ای انجام بشه. اگه لازم باشه می تونم
با یک مثال عملی نشون بدم که GetHashCode چطور روی افزایش سرعت مقایسه موثره.

SHD.NET
شنبه 19 اسفند 1391, 19:57 عصر
اين متد همانطوري که دوستمون گفت متنها را به يک عدد تبديل ميکنه که بايد دقت شود که اين خاصيت

يکطرفه است و نميتوان از کد بوجود اومده متن رو بدست آورد
سلام . من هم قبلا شنیده بودم این متد یک طرفس، اما سوال پیش میاد اینکه سایت هایی مثل این سایت (http://md5.rednoize.com/)چجوری میتونند این متد رو برگردونند ؟؟

اصلا یه سوال: مثلا شما وقتی یه چیزی رو کد می کنین ، مگه نمیتونین با روش برعکسش اونو دیکد کنین ؟؟

پس قضیه چیه ؟؟ :متفکر:

ممنون از راهنماییتون

SlowCode
شنبه 19 اسفند 1391, 20:11 عصر
سلام

سلام . من هم قبلا شنیده بودم این متد یک طرفس، اما سوال پیش میاد اینکه سایت هایی مثل این سایت (http://md5.rednoize.com/)چجوری میتونند این متد رو برگردونند ؟؟اینا یه دیتابیس دارن که توش پره این هش هاست، اینا پسوردها رو اول با بعضی روش ها میشکنن(مثلا brute force attack) بعد میدن خدمت شما.
اگه دقت کنی پایین صفحه نوشته:

Search in 93,753,635 md5/sha1 hashes. 171,825,564 searches answered since feb 2005.


اصلا یه سوال: مثلا شما وقتی یه چیزی رو کد می کنین ، مگه نمیتونین با روش برعکسش اونو دیکد کنین ؟؟به نظرت اگه به همین سادگی بود امنیتی وجود داشت؟ وقتی کسی بخواد به دیتابیس نفوذ کنه بزرگترین مشکل همین کرک کردن هش هاست.
ولی یه سایتی رو دیدم خیلی حال کردم، یه پسوردی بهش دادم تا کرک کنه گفت تو دیتابیس ما یافت نشد، ایمیلم رو گرفت بعد دو سه روز بهم فرستاد.(البته اسمش یادم رفته)

SHD.NET
شنبه 19 اسفند 1391, 21:10 عصر
ولی یه سایتی رو دیدم خیلی حال کردم، یه پسوردی بهش دادم تا کرک کنه گفت تو دیتابیس ما یافت نشد، ایمیلم رو گرفت بعد دو سه روز بهم فرستاد.(البته اسمش یادم رفته)
سلامی مجدد . ممنون از توضیحات کاملتون، میشه این سایت رو معرفی کنین؟؟؟ اگه مقدوره بگردین و اینجا بزارین لینکشو ؟؟ من بارها شده دیتابیس یه سایتو زدم، اما بخاطر همین کرک شدن هش اون بیخیال ادامه کار شدم .

ممنون

linux
شنبه 19 اسفند 1391, 22:11 عصر
سلام دوستان

بعضي از اشيا متد get hashcode دارند ، حالا از اين متد چه استفاده اي ميشه ؟
از MSDN
"
A hash code is a numeric value that is used to identify an object during equality testing. It can also serve as an index for an object in a collection.
The GetHashCode method is suitable for use in hashing algorithms and data structures such as a hash table."
واضح و روشن.

linux
شنبه 19 اسفند 1391, 22:19 عصر
سلام . من هم قبلا شنیده بودم این متد یک طرفس، اما سوال پیش میاد اینکه سایت هایی مثل این سایت (http://md5.rednoize.com/)چجوری میتونند این متد رو برگردونند ؟؟

اصلا یه سوال: مثلا شما وقتی یه چیزی رو کد می کنین ، مگه نمیتونین با روش برعکسش اونو دیکد کنین ؟؟

پس قضیه چیه ؟؟ :متفکر:

ممنون از راهنماییتون
یک سری مفاهیمی هست که باید دقت کنید در موردش هرچیزی که کد بشه حتما دیکد هم خواهد شد.
یک بحثی داریم به اسم hashing که الگوریتمش بر این پایه هست که شما ورودی که سایزش ممکن هست هر مقداری باشد را به این تابع می دهی و در خروجی یک مقدار با اندازه ثابت دریافت می کنی فرض کنید من فایلی را برای شما ارسال می کنم و hash فایل را هم برای شما ایمیل می کنم شما همان الگوریتم را بر روی فایل دریافتی اعمال می کنی و خروجی را با هش ارسالی توسط من مقایسه می کنند اگر یکسان بودند که فایل سالم هست در غیر اینصورت فایل دستکاری شده یا ناقص دریافت شده. برای پسورد ها هم می توانید از این روش استفاده کنید. از الگوریتم های مشهور برای hashing ، می توان به MD5 , sha1,sha512 اشاره کرد.
یک بحث هم به اسم رمزنگاری هست که متن ارسالی توسط یک تابع رمزگداری شده و بعد از این که به دست شما رسید توسط تابعی دیگر رمزگشایی می شود که دو روش متقارن و نامتقارن وجود دارد ...