PDA

View Full Version : آموزش: +سئوال:: هش MD5 در VB.NET



JaVa
دوشنبه 16 مرداد 1391, 15:44 عصر
با سلام و خسته نباشید...

کاراکتر "1" وارد شده
خروجی هر بار


1B2M2Y8AsgTpgAmY7PhCfg==
2iu9I2HkRim3Dk3gBSXrow==
EfAyW18tUFDUZEO4PGLL8w==
LxmRa3JrT5O9ZLYm5gsqtQ==




Imports System
Imports System.Security.Cryptography
Imports System.Text
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim m As MD5 = MD5.Create()

Dim hash As Byte() = m.ComputeHash(Encoding.Default.GetBytes(TextBox1.T ext))
TextBox1.Text = (Convert.ToBase64String(hash))
End Sub

End Class



نظری در موردش دارید بفرمایید ؟؟؟

JaVa
دوشنبه 16 مرداد 1391, 15:52 عصر
قسمت جالبش اینجاست که اگه شما یه فایل متنی رو تبدیل کنید 24 کاراکتر میده و اگه 1 کاراکتر رو هم تبدیل کنید بازم 24 کاراکتر بهت میده.

عجبا

the king
دوشنبه 16 مرداد 1391, 17:18 عصر
قسمت جالبش اینجاست که اگه شما یه فایل متنی رو تبدیل کنید 24 کاراکتر میده و اگه 1 کاراکتر رو هم تبدیل کنید بازم 24 کاراکتر بهت میده.

عجبا

Hash ئه MD5 همیشه 128 بیتی (16 بایتی) است، Base 64 هم هر 3 بایت رو در 4 کاراکتر کدی می کنه و همیشه طول اش مضربی از 4 ئه و اگر
کاراکتر کم بیاره با = تکمیل می کنه. اون 16 بایت رو در 22 کاراکتر کدی می کنه اما چون طول اش باید مضربی از 4 باشه دو کاراکتر = هم به طولش اضافه میشه.

JaVa
دوشنبه 16 مرداد 1391, 20:20 عصر
حالا یه سئوال کوچیک من این رو برای رمز کردن پسورد حساب کاربری مورد نظر می خوام.

در هنگام ورود کاربر باید پسوردی که کاربر وارد می کنه رو تبدیل به هش بکنم و بعدش با پسوردی که در بانک تبدیل شده مقایسه کنم ؟

یا راه دیگه ای وجود داره ؟؟


راستی یه چیز دیگه این رمز نگار ها هم عجب جونورهایی که نیستن ؟؟:قهقهه:

موفق باشید.*

tstsst
سه شنبه 17 مرداد 1391, 09:24 صبح
سلام
اگر پسورد به صورت MD5 درمیاد اونو نمی شه برگردوند ولی hash رو میشه .
برای MD5 باید پسورد قبلا به صورت م دی 5 در دیتابیس یا... وجود داشته باشه و پسورد دادشده با او یکی باشه.

هکر ها هم معمولا از سایتا یا دیتابیس های استفاده می کنند که میلیاردها پسورد MD5 دارند برای کرک کردن پسوردی که به دست آوردند.!

alimanam
سه شنبه 17 مرداد 1391, 17:32 عصر
با سلام


اگر پسورد به صورت MD5 درمیاد اونو نمی شه برگردوند ولی hash رو میشه .

لطفاً منبع رو ذکر کنین ! تا جایی که میدونم Hash رو نمیشه مهندسی معکوس کرد و عملیات برگشت پذیر نیست . البته این که میگم برگشت پذیر نیست این نیست هیچوقت نمیشه ! اما عمومیت نداره یعنی اینکه این الگوریتم ها جوری طراحی و پیاده سازی میشن که به صورت معمول به هیچ عنوان نمیشه رشته کد شده , رو به به حالت ابتدایی خودش برگردوند ! مگر استفاده از روش هایی که این روش ها دست دولتی هاست نه افراد عادی !

موفق باشید./

JaVa
سه شنبه 17 مرداد 1391, 22:02 عصر
لطفاً منبع رو ذکر کنین ! تا جایی که میدونم Hash رو نمیشه مهندسی معکوس کرد و عملیات برگشت پذیر نیست . البته این که میگم برگشت پذیر نیست این نیست هیچوقت نمیشه ! اما عمومیت نداره یعنی اینکه این الگوریتم ها جوری طراحی و پیاده سازی میشن که به صورت معمول به هیچ عنوان نمیشه رشته کد شده , رو به به حالت ابتدایی خودش برگردوند ! مگر استفاده از روش هایی که این روش ها دست دولتی هاست نه افراد عادی !

بر طبق نظرات و معلومات بنده.
اولا این الگوریتم بازگشت ناپذیر .
دوما این الگوریتم هر باری کدی که تولید میکنه و دفعه قبلش فرق میکنه و من شنیدم احتمال اینکه یه بار یه کاراکتر رو به یک صورت به کد تبدیل کنه خیلی کمه

حالا با فرض این دو تا که اگه درست باش:
چطور میشه که برابر بودن دو رمز تبدیل شده رو میفهمه یعنی رمزی که در بانک ذخیره شده با اون کاراکترهایی که کاربر وارد میکنه بعد تبدیل به کد میکنه این کد با اون کدی که در بانک ذخیره شده فرق میکنه که ؟؟؟؟؟؟؟

alimanam
سه شنبه 17 مرداد 1391, 22:52 عصر
با سلامی دوباره !


چطور میشه که برابر بودن دو رمز تبدیل شده رو میفهمه یعنی رمزی که در بانک ذخیره شده با اون کاراکترهایی که کاربر وارد میکنه بعد تبدیل به کد میکنه این کد با اون کدی که در بانک ذخیره شده فرق میکنه که ؟؟؟؟؟؟؟

لطفاً فکر دیتابیس رو از سرتون بیارین بیرون !!!!!!!!! الگوریتم MD5 یک نوع " هش " هستش و ربطی به دیتابیس نداره , درضمن برای اعتبارسنجی میان رشته مورد نظر رو در ابتدا هش میکنن و بعد با مقدار متناظر اون رشته که از قبل هش شده , مقایسه میکنن .

موفق باشید./

JaVa
سه شنبه 17 مرداد 1391, 23:10 عصر
و بعد با مقدار متناظر اون رشته که از قبل هش شده , مقایسه میکنن .

مقدار متناظر اون رشته که از قبل هش ده رو کجا می خوای قرار بدی ؟
من که گذاشتمش توی دیتابیس !


ر ابتدا هش میکنن و بعد با مقدار متناظر اون رشته که از قبل هش شده , مقایسه میکنن .

بر اساس این جمله بنده :این الگوریتم هر باری کدی که تولید میکنه با دفعه قبلش فرق میکنه و من شنیدم احتمال اینکه یه بار یه کاراکتر رو به یک صورت به کد تبدیل کنه خیلی خیلی خیلی کمه

چطور مقایسه رو انجام میده ؟

با تشکر.*

alimanam
سه شنبه 17 مرداد 1391, 23:23 عصر
با سلامی 3 باره !

دوست عزیز منظور بنده از بیخیال شدن دیتابیس ! در مورد خود الگوریتم بود یعنی اینکه این الگوریتم برای پیاده سازی اعتبارسنجی خودش کاری به دیتابیس شما نداره ! نه اینکه ما مقدار هش شده رو درکجا میخوایم ذخیره کنیم !

و اما برای اعتبارسنجی رشته ایی که بوسیله MD5 هش شده به راحتی میتونی از تابع زیر استفاده کنی :


Private Function CompareTwoBytes(ByVal tmphash As Byte(), ByVal tmpnewhash As Byte()) As Boolean
Dim bEqual As Boolean = False
If tmpnewhash.Length = tmphash.Length Then
Dim i As Integer
Do While (i < tmpnewhash.Length) AndAlso (tmpnewhash(i) = tmphash(i))
i += 1
Loop
If i = tmpnewhash.Length Then
bEqual = True
End If
End If
Return bEqual
End Function


موفق باشید./

the king
سه شنبه 17 مرداد 1391, 23:25 عصر
بر طبق نظرات و معلومات بنده.
اولا این الگوریتم بازگشت ناپذیر .
دوما این الگوریتم هر باری کدی که تولید میکنه و دفعه قبلش فرق میکنه و من شنیدم احتمال اینکه یه بار یه کاراکتر رو به یک صورت به کد تبدیل کنه خیلی کمه

حالا با فرض این دو تا که اگه درست باش:
چطور میشه که برابر بودن دو رمز تبدیل شده رو میفهمه یعنی رمزی که در بانک ذخیره شده با اون کاراکترهایی که کاربر وارد میکنه بعد تبدیل به کد میکنه این کد با اون کدی که در بانک ذخیره شده فرق میکنه که ؟؟؟؟؟؟؟


با سلام

لطفاً منبع رو ذکر کنین ! تا جایی که میدونم Hash رو نمیشه مهندسی معکوس کرد و عملیات برگشت پذیر نیست . البته این که میگم برگشت پذیر نیست این نیست هیچوقت نمیشه ! اما عمومیت نداره یعنی اینکه این الگوریتم ها جوری طراحی و پیاده سازی میشن که به صورت معمول به هیچ عنوان نمیشه رشته کد شده , رو به به حالت ابتدایی خودش برگردوند ! مگر استفاده از روش هایی که این روش ها دست دولتی هاست نه افراد عادی !

موفق باشید./

اینکه بخواهید رمز های مختلف رو امتحان کنید تا به رمزی برسید که Hash شده اش با اون Hash مورد نظر مطابقت داشته باشه (Brute force) یک بحث
دیگه است که همیشه و در مورد همه Hash ها عملی است اما اونقدر زمان می بره که کلا به عنوان نقطه ضعف رویش حساب نمی کنند.
اما اولا Hash ای مثل MD5 کاری به زمان نداره و همیشه برای ورودی خاص باید خروجی مشخص و همیشه یکسان داشته باشه وگرنه اگر قرار بود
که هر بار برای اون داده ورودی ثابت یک خروجی جدید ایجاد کنه که دیگه میشه خروجی تصادفی و بدرد چک کردن صحت ورودی نمی خوره.

ثانیا از نظر عملی محاله که بشه از یک Hash با طول ثابت (مثلا MD5 طولش 16 بایتی است) به هر داده ورودی با طول بیشتر از اون رسید.
اینکه میگم محاله نظر من یا نتیجه تحقیقات تجربی و ... نیست، از نظر علم ریاضی غیر ممکنه، چون اگر ممکن بود فرضا همین MD5 قوی ترین
تکنیک فشرده سازی دنیا بود که می توانست 1000000000 ترابایت داده رو در 16 بایت فشرده کنه و بعد شما از اون 16 بایت به
اون 1000000000 تربایت داده اولیه برسید، چنین چیزی ممکنه؟ معلومه که ممکن نیست چون نمیشه که برای اون همه حالت های مختلف
داده ورودی یک Hash یکتا رو فقط در 16 بایت بوجود آورد. تعداد حالت هایی که با 16 بایت میشه بوجود آورد قابل مقایسه با تعداد حالت های
یک داده 17 بایتی هم نیست چه برسه به 1000000000 ترابایتی.

RelaxMan
یک شنبه 07 آبان 1391, 20:02 عصر
مگر استفاده از روش هایی که این روش ها دست دولتی هاست نه افراد عادی

عجب دولتی های قدرتمندی!!!
پس اینا که این همه قدرت دارم اگه از یه فایل یک گیگی ، MD5 بگیرم می تونن برش گردونن دیگه؟
نگید نه که ناراحت می شن!


اما اولا Hash ای مثل MD5 کاری به زمان نداره و همیشه برای ورودی خاص باید خروجی مشخص و همیشه یکسان داشته باشه

منم موافقم

alimanam
یک شنبه 07 آبان 1391, 22:04 عصر
با سلام

عجب دولتی های قدرتمندی!!!

ظاهراً شک داری که هر الگوریتم شناخته شده ایی یه حفره به اندازه توپ فوتبال توش هست اما کسایی که میتونین این توپ من نداشتم بابام بهم ... !!! داد رو ببینن باید خیلی با حال تر از منو شما باشن ! :قهقهه: آخه وقتی به راحتی آب خوردن گواهینامه های دیجیتال رو کپی برداری میکنن شما داری با من از چه چیزی صحبت میکنی ؟؟؟!!!! هش و رمزنگاری واسه من و شما و خیلی خیلی های دیگه غیرقابل نفوذه نه واسه صاحبان قدرت و پول .


پس اینا که این همه قدرت دارم اگه از یه فایل یک گیگی ، MD5 بگیرم می تونن برش گردونن دیگه؟

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


منم موافقم

من که شدیداً موافقم .

موفق باشید ./

h_a_m_i_d
یک شنبه 07 آبان 1391, 23:15 عصر
دوستان عزیز روش هش کردن روشی نیست که اگر یک گیگ رو بهش بدین یک کد 24 کاراکتری مثلا بهتون بده
بلکه این اعداد تکرار میشوند مثلا به شما یک برنامه بدن که با اون میتونین فقط خروجی 1 و 2(عدد تولید شده دو رقمی باشد) را داشته باشید
حالا اگر 4 تا عدد 1 و 2 و3 و4و5و6و7و8 رو بهش بدیم نتیجه ها تکرار میشوند
1=11
2=22
3=12
4=21
5=11
6=22
7=12
8=21
خوب حالا دلیل این که ما این دیدگاه برامون پیش میاد اینه که این پارامتر (که به تازگی چند شرکت در روس توانسته اند ان را دوباره برگردانند) برای ما برگشت ناپذیره و چون نمیتونیم نتیجه های برگشت خورده رو ببینیم این دیدگاه برامون پیش میاد
مگرنه اگر اینطور بود برنامه های مثل winrar برشکست میشدند چون یک نفر یک گیگ اطلاعات رو تبدیل میکرد به حداکثر 100 کاراکتر و این یعنی تبدیل یک گیگ به یک کیلوبایت که در علم کامپیوتر این حرف یک حرف بی ارزش حساب میشود
دوستان در مورد هر چیز باید فکر کرد
موفق باشید