PDA

View Full Version : Decode نمودن رشته ای که با MD5 کد شده است



mohammad_sabeghi
یک شنبه 20 دی 1383, 17:54 عصر
با سلام به همه دوستان
من با استفاده از الگوریتم MD5 رشته مورد نظرم را Code کرده ام
سئوال من اینست که چگونه آن را Decode نمایم.

با تشکر

Developer Programmer
یک شنبه 20 دی 1383, 18:32 عصر
بسته به این که با چه کلیدی آنرا کد کرده اید می توانید کد گشایی کنید

Inprise
یک شنبه 20 دی 1383, 18:45 عصر
من با استفاده از الگوریتم MD5 رشته مورد نظرم را Code کرده ام

Code با Hash متفاوت است . الگوریتم MD5 یک روش برای تولید Hash است نه Code . الگوریتمهای تولید Hash مثل MD5 یا SHA-1 و ... قابل بازگشت نیستند . یعنی رشته ای که از اعمال این الگوریتم ایجاد شده ، قابل تبدیل به موجودیت اولیه نیست . تنها راه "احتمالی" ، سعی/خطا و آزمودن کلیهء حالات ممکن و تولید Hash از هر حالت و مقایسهء Hash ها ست . حتی اگر با یک احتمال بی نهایت ضعیف ، خروجی این قیاس True باشه ، نمیشه اطمینان داشت که لزوما" آنچه از آن Hash گرفته شده ، همین است که از سعی/خطا به دست آورده ایم .

موفق باشی

Developer Programmer
یک شنبه 20 دی 1383, 18:48 عصر
:strange:
خوب عمو اینپرایز اگه اینطور باشه که اصلا به چه دردی می خوره ما hash کنیم؟ مگه xxx داریم چیزی بسازیم که با اولش بر نمیگرده؟

Inprise
یک شنبه 20 دی 1383, 18:54 عصر
اول اینو بخون ، (http://www.barnamenevis.org/forum/viewtopic.php?t=5410) بعد اگر نظرت عوض شد ، روی نحوهء عملکردت تو این فروم تجدید نظر کن . فکر میکنم این کاریه که این روزا خیلیها باید انجامش بدن .

عصر خوش

Mahsa Amiri
دوشنبه 21 دی 1383, 09:28 صبح
پس برنامه johncracker چطوری پسوردهای لینوکس و پیدا میکنه ؟ مگه اونا هم بصورت md5 ذخیره نمیشن ؟

Inprise
دوشنبه 21 دی 1383, 14:11 عصر
چطوری پسوردهای لینوکس و پیدا میکنه ؟ مگه اونا هم بصورت md5 ذخیره نمیشن ؟

نحوهء ذخیره سازی به انتخاب کاربر و توزیع لینوکس بستگی داره . چند برنامه ای که پسوردها رو برمیگردونن ، یا زمانی عمل میکنند که Hashing اتفاق نیفتاده ، یا از Brute-Force استفاده میکنن ، که توضیحش اون بالا هست .

microsoftsat
شنبه 24 بهمن 1383, 12:57 عصر
با سلام

عذر میخوام که topic جدید باز نکردم! :wink:
میخواستم بپرسم که md5 چند کاراکتر بر میگرداند؟ یعنی حداقل و حداکثر دارد؟ یا نه همیشه تعدادخاصی کاراکتر برمیگرداند!!؟

ممنونم./. :oops:

linux
شنبه 24 بهمن 1383, 16:13 عصر
اگر به لینکی که داده شده بود می رفتی می دیدی که نوشته"
"MD5 روش برای تولید یک چکیده از یک پیام است ( Message Digest ) . چه یک کلمه ، یک عدد ، یک جمله ، یک کتاب چند صد صفحه ای ، یک فایل و ... به او بدهید ، یک چکیده با طول ثابت 128بیتی تولید میکند ."
هر ورودی که داده بشه خروجی 128 بیت خواهد بود!

microsoftsat
یک شنبه 25 بهمن 1383, 07:35 صبح
پس با این وجود، یک فیلد 16 کاراکتری براش کافیه؟!! :wink:

hmm
یک شنبه 25 بهمن 1383, 10:59 صبح
هر ورودی که داده بشه خروجی 128 بیت خواهد بود!
اصلاح میکنم 128 بایتی!!!!

Inprise
یک شنبه 25 بهمن 1383, 11:10 صبح
خیلی برام عجیبه وقتی میبینم تا بحال حداقل سه بار در این مورد نوشته ام ؛ باز هم ...

همان "128 بیت" درست است .

hmm
یک شنبه 25 بهمن 1383, 12:03 عصر
اصلاح میکنم 128 بایتی!!!!
باز هم اصلاح میکنم 128 بیتی !!!! :confy2: :sorry:

microsoftsat
یک شنبه 25 بهمن 1383, 13:11 عصر
ار همتون متشکرم :oops:

seyedof
پنج شنبه 23 تیر 1384, 21:04 عصر
سلام
بله اگر کلید را داشته باشید قابل برگشت است به روش غیر brute force. ضمنا MD5 که من یکبار کار کردم فکر کنم ۱۶ بایت خروجی دارد یعنی ۱۲۸ بیت. اگر داده شما هم کمتر یا مساوی همین تعداد بیت باشد و روی آن MD5 را اعمال کنید، با داشتن کلید آن میتوان به داده اولیه رسید. به عنوان مثال در پروتکل RADIUS مخصوص Access Server ها که من روی نوشتن سرورش کار میکردم پسورد به همین شکل کد و دیکد میشد. هر چند اصولا کاربرد الگوریتمهای Hashing این نیست و برای حفظ Integrity داده ها و امضای دیجیتالی و Checksum به کار میروند.
ممنون علی

houtanal
پنج شنبه 23 تیر 1384, 22:16 عصر
البته اگر منظور شما Md5 است تا جایی که من اطلاع دارم کلیدی تولید نمی شود که با داشتن آن بتوان رشته هش شده را دیکد کرد.اصولا دیکد کردن عبارات هش شده بی معنیست.(کد نمشه که بخواد دیکد بشه)

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

houtanal
پنج شنبه 23 تیر 1384, 22:25 عصر
:strange:
خوب عمو اینپرایز اگه اینطور باشه که اصلا به چه دردی می خوره ما hash کنیم؟ مگه xxx داریم چیزی بسازیم که با اولش بر نمیگرده؟


اگر تو میتونی چیزی رو که کد کردی دیکد کنی بنابراین بقیه هم میتونن

برای نگه داری پسورد ها ، تهیه امضا برای تشخیص اعتبار داده موجود و... هش کردن بسیار راه گشاست.شخصا توصیه می کنم بنا بر برنامه و نحوه عملکردش از دو لایه (یا بیشتر) هشینگ استفاده کنید.مثلا ((('md5(sha1(md5('hello world

این کار دو فایده داره
گمراه کردن مهاجم و تلف کردن وقتش.

someCoder
جمعه 24 تیر 1384, 10:57 صبح
دو لایه هش!!! چرا آخه؟

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

houtanal
جمعه 24 تیر 1384, 12:31 عصر
دو لایه هش!!! چرا آخه؟

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

چرا من تا به حال چندین بار یک رشته MD5 را که حاوی پسورد بود را با بروت فورس بدست آوردم

منظور از گمراه کردن
من گاهی اگر واقعا لازم باشه رشته ای رو که توسط برنامه ذخیره میکنم که الاظاهر می تونه یک رشته sha1 یا md5 باشه اما فی اولواقع نیست

someCoder
جمعه 24 تیر 1384, 13:50 عصر
چرا من تا به حال چندین بار یک رشته Md5 را که حاوی پسورد بود را با بروت فورس بدست آوردم

اینکه با بروت فورس شکستیش دلیلش امنیت کم پسورد انتخاب شده بوده، نه شکستن Md5 یا Sha1! چون اگر طرف 6 بار هم هش میکرد، تو هم توی بروت فورس از 6 بار هش استفاده میکردی.

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

seyedof
جمعه 24 تیر 1384, 14:30 عصر
البته اگر منظور شما Md5 است تا جایی که من اطلاع دارم کلیدی تولید نمی شود که با داشتن آن بتوان رشته هش شده را دیکد کرد.اصولا دیکد کردن عبارات هش شده بی معنیست.(کد نمشه که بخواد دیکد بشه)

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

سلام

بله من چون خیلی وقت پیش روی این موضوع کار میکردم RADIUS Server که در اوونجا پسورد رو با MD5 یک کلمه رمز و شماره درخواست XOR میکرد بعد روی شبکه میفرستاد، اشتباه کردم. MD5 یک Hashing یک طرفه است.

در مورد میزان حجم داده و... من هم چیزی غیر از این نگفتم و دقیقا به همین مطلب اشاره کردم که اندازه داده ها هر قدر باشه MD5 آن ۱۲۸ بیت خواهد بود. مانند CRC32 که ۳۲ بیت خروجی دارد.
ممنون علی

houtanal
جمعه 24 تیر 1384, 19:10 عصر
اینکه با بروت فورس شکستیش دلیلش امنیت کم پسورد انتخاب شده بوده، نه شکستن Md5 یا Sha1! چون اگر طرف 6 بار هم هش میکرد، تو هم توی بروت فورس از 6 بار هش استفاده میکردی.


به هر حال تو هیچ وقت نمیتونی امنیت چیزی رو صد در صد تضمین کنی.تنها کاری که میشه کرد پایین آوردن درصد ریسک است.تلف کردن وقت مهاجم یکی از این راه هاست.توجه کن که مهاجم برای این که بتونه در بنامش از همون الگوریتم لایه بندی تو استفاده کنه محبوره حداقل یک بار یکی از رشته های هش شده ات رو بدست بیاره.

هر کسی با داشتن یک rainbow table خوب + یک سیستم سریع می تونه قوی ترین پسورد ها رو هم (احتمالا) بدست بیاره.

someCoder
جمعه 24 تیر 1384, 22:30 عصر
هر کسی با داشتن یک rainbow table خوب + یک سیستم سریع می تونه قوی ترین پسورد ها رو هم (احتمالا) بدست بیاره
من اینطور فکر نمیکنم! حاضرم ثابت کنم! میخوای من یه رشته رو Hash کنم و یا مثلا با AED یا حتی 3DES روم کنم، اونوقت اگر کسی تونست کرکش کنه! هم ریاضی و هم تجربه نشون داده که نمیشه. مگر اینکه پسورد اونقدر ضعیف باشه که بشه حدسش زد.

Sirus-v
جمعه 24 تیر 1384, 23:03 عصر
اگر یک عبارت 2 بار MD5 بشه با قوی ترین سیستم ها هم مراحل کرک به هفته ها می کشه و به CPU آسیب می رسه . من روی قوی ترین و پرسرعت ترین سرور های لینوکس این قضیه رو تست کردم . می دونید Brute Force کردن یک عبارت 32 کارکتری یعنی چی ؟؟؟؟ یعنی فاجعه . امکان لو رفتنش خیلی کمه . و اما اگه 3 یا 4 بار هاش بشه امنیت کامل پسورد از نظر کرکینگ برقراره . در ضمن هیچ کلیدی در MD5 وجود نداره منظورم کلید Public و Priv8 هست . MD5 توسط یک پروفسور ریاضی طراحی شده و مشکلی برش وارد نیست .

someCoder
شنبه 25 تیر 1384, 20:17 عصر
اگر یک عبارت 2 بار MD5 بشه با قوی ترین سیستم ها هم مراحل کرک به هفته ها می کشه و به CPU آسیب می رسه .
اولا که اگر یک بار کد بشه کرک کردنش به قرنها میکشه! دیگه دو بارشو من درک نمیکنم چه صیغه ایه!
ضمنا من تو کف این ماجرای سوختن CPU هستم!!!!!!!!!!!(و هزار تا علامنت تعجب دیگه!)
آخه چه ربطی داره ... به شقیقه!

houtanal
شنبه 25 تیر 1384, 21:41 عصر
قرنها؟؟!!!
احتمالا برات پیش نیومده که نیاز به این کار داشته باشی

someCoder
شنبه 25 تیر 1384, 22:05 عصر
اگر شک داری امتحانش مجانیه!
میخوای برات یه رشته Hash کنم و تونستی قبل از 100 سال دیگه برام کرکش کن!

بابک زواری
یک شنبه 26 تیر 1384, 12:02 عصر
در الگوریتم هش کردن یک آرایه مقدار دهی میشود (به کد زیر ) ؛ حال اگر این مقادیر رو من تغییر بدم مشکلی در نتیجه حاصله بوجود میاد یا نه


Public Sub loadArrayValues()
m_lOnBits(0) = CLng(1)
m_lOnBits(1) = CLng(3)
m_lOnBits(2) = CLng(7)
m_lOnBits(3) = CLng(15)
m_lOnBits(4) = CLng(31)
m_lOnBits(5) = CLng(63)
m_lOnBits(6) = CLng(127)
m_lOnBits(7) = CLng(255)
m_lOnBits(8) = CLng(511)
m_lOnBits(9) = CLng(1023)
m_lOnBits(10) = CLng(2047)
m_lOnBits(11) = CLng(4095)
m_lOnBits(12) = CLng(8191)
m_lOnBits(13) = CLng(16383)
m_lOnBits(14) = CLng(32767)
m_lOnBits(15) = CLng(65535)
m_lOnBits(16) = CLng(131071)
m_lOnBits(17) = CLng(262143)
m_lOnBits(18) = CLng(524287)
m_lOnBits(19) = CLng(1048575)
m_lOnBits(20) = CLng(2097151)
m_lOnBits(21) = CLng(4194303)
m_lOnBits(22) = CLng(8388607)
m_lOnBits(23) = CLng(16777215)
m_lOnBits(24) = CLng(33554431)
m_lOnBits(25) = CLng(67108863)
m_lOnBits(26) = CLng(134217727)
m_lOnBits(27) = CLng(268435455)
m_lOnBits(28) = CLng(536870911)
m_lOnBits(29) = CLng(1073741823)
m_lOnBits(30) = CLng(2147483647)

m_l2Power(0) = CLng(1)
m_l2Power(1) = CLng(2)
m_l2Power(2) = CLng(4)
m_l2Power(3) = CLng(8)
m_l2Power(4) = CLng(16)
m_l2Power(5) = CLng(32)
m_l2Power(6) = CLng(64)
m_l2Power(7) = CLng(128)
m_l2Power(8) = CLng(256)
m_l2Power(9) = CLng(512)
m_l2Power(10) = CLng(1024)
m_l2Power(11) = CLng(2048)
m_l2Power(12) = CLng(4096)
m_l2Power(13) = CLng(8192)
m_l2Power(14) = CLng(16384)
m_l2Power(15) = CLng(32768)
m_l2Power(16) = CLng(65536)
m_l2Power(17) = CLng(131072)
m_l2Power(18) = CLng(262144)
m_l2Power(19) = CLng(524288)
m_l2Power(20) = CLng(1048576)
m_l2Power(21) = CLng(2097152)
m_l2Power(22) = CLng(4194304)
m_l2Power(23) = CLng(8388608)
m_l2Power(24) = CLng(16777216)
m_l2Power(25) = CLng(33554432)
m_l2Power(26) = CLng(67108864)
m_l2Power(27) = CLng(134217728)
m_l2Power(28) = CLng(268435456)
m_l2Power(29) = CLng(536870912)
m_l2Power(30) = CLng(1073741824)

K(0) = &H428A2F98
K(1) = &H71374491
K(2) = &HB5C0FBCF
K(3) = &HE9B5DBA5
K(4) = &H3956C25B
K(5) = &H59F111F1
K(6) = &H923F82A4
K(7) = &HAB1C5ED5
K(8) = &HD807AA98
K(9) = &H12835B01
K(10) = &H243185BE
K(11) = &H550C7DC3
K(12) = &H72BE5D74
K(13) = &H80DEB1FE
K(14) = &H9BDC06A7
K(15) = &HC19BF174
K(16) = &HE49B69C1
K(17) = &HEFBE4786
K(18) = &HFC19DC6
K(19) = &H240CA1CC
K(20) = &H2DE92C6F
K(21) = &H4A7484AA
K(22) = &H5CB0A9DC
K(23) = &H76F988DA
K(24) = &H983E5152
K(25) = &HA831C66D
K(26) = &HB00327C8
K(27) = &HBF597FC7
K(28) = &HC6E00BF3
K(29) = &HD5A79147
K(30) = &H6CA6351
K(31) = &H14292967
K(32) = &H27B70A85
K(33) = &H2E1B2138
K(34) = &H4D2C6DFC
K(35) = &H53380D13
K(36) = &H650A7354
K(37) = &H766A0ABB
K(38) = &H81C2C92E
K(39) = &H92722C85
K(40) = &HA2BFE8A1
K(41) = &HA81A664B
K(42) = &HC24B8B70
K(43) = &HC76C51A3
K(44) = &HD192E819
K(45) = &HD6990624
K(46) = &HF40E3585
K(47) = &H106AA070
K(48) = &H19A4C116
K(49) = &H1E376C08
K(50) = &H2748774C
K(51) = &H34B0BCB5
K(52) = &H391C0CB3
K(53) = &H4ED8AA4A
K(54) = &H5B9CCA4F
K(55) = &H682E6FF3
K(56) = &H748F82EE
K(57) = &H78A5636F
K(58) = &H84C87814
K(59) = &H8CC70208
K(60) = &H90BEFFFA
K(61) = &HA4506CEB
K(62) = &HBEF9A3F7
K(63) = &HC67178F2

End Sub

someCoder
یک شنبه 26 تیر 1384, 14:56 عصر
تا جایی که من میدونم مشکلی ایجاد نمیشه! فقط دیگه یه هش استاندارد نداریم! یعنی یه نتیجه دیگه به دست میاد که طبق تعریف هش بازم هش هست اما استاندارد نیست.
شاید بشه گفت یه هش شخصی! مثلا یه راهکار بجای اون روش دو بار هش کردن که اونم هدفش غیر استاندارد کردن خروجی بود.


البته فکر کنم اینطور باشه! مطمئن نیستم

بابک زواری
یک شنبه 26 تیر 1384, 18:20 عصر
مهم نیست که استاندارد نباشه ؛ مشکل نداشته باشه و بتونم ازش استفاده کنم کافیه

someCoder
یک شنبه 26 تیر 1384, 21:53 عصر
تا جایی که من میدونم نباید مشکلی پیش بیاد. البته بهتره اساتید هم در این مورد نظر بدن

ICEMAN
جمعه 07 مرداد 1384, 12:51 عصر
تا جایی که من میدونم Md5 یه الگریتم یه طرفه است و بر نمی گرده

بابک زواری
جمعه 07 مرداد 1384, 14:40 عصر
تا جایی که من میدونم Md5 یه الگریتم یه طرفه است و بر نمی گرده
اینکه واضحه ؛ تمام بحثم از اول روی این محور میچرخه .
مطالب رو از اول یکبار دیگه بخون به لینک استاد اینپرایز هم توجه کن

someCoder
جمعه 07 مرداد 1384, 21:37 عصر
آقای زواری، حالا که این پست دوباره بالا اومد یادم اومد یه چیز دیگه هم در جوابتون اضافه کنم. اینکه گفتم فکر میکنم مشکلی نباید پیش بیاد به این دلیل بود که طبق منطق الگوریتم اینها فقط یه سری مقادیر برای استاندارد شدن هستند و استحکام این الگوریتم با این مقادیر اثبات شده است. اما اینکه گفتم شک دارم به این دلیل بود که ممکنه یه وقتی با انتخاب مقادیر اولیه نامناسب (شاید!!!) روشی برای کرک کردن پیدا بشه. البته این نظر شخصی منه و هیچ پایه علمی هم نداره. فقط یه حدسه.