با سلام به همه دوستان
من با استفاده از الگوریتم MD5 رشته مورد نظرم را Code کرده ام
سئوال من اینست که چگونه آن را Decode نمایم.
با تشکر
با سلام به همه دوستان
من با استفاده از الگوریتم MD5 رشته مورد نظرم را Code کرده ام
سئوال من اینست که چگونه آن را Decode نمایم.
با تشکر
بسته به این که با چه کلیدی آنرا کد کرده اید می توانید کد گشایی کنید
Code با Hash متفاوت است . الگوریتم MD5 یک روش برای تولید Hash است نه Code . الگوریتمهای تولید Hash مثل MD5 یا SHA-1 و ... قابل بازگشت نیستند . یعنی رشته ای که از اعمال این الگوریتم ایجاد شده ، قابل تبدیل به موجودیت اولیه نیست . تنها راه "احتمالی" ، سعی/خطا و آزمودن کلیهء حالات ممکن و تولید Hash از هر حالت و مقایسهء Hash ها ست . حتی اگر با یک احتمال بی نهایت ضعیف ، خروجی این قیاس True باشه ، نمیشه اطمینان داشت که لزوما" آنچه از آن Hash گرفته شده ، همین است که از سعی/خطا به دست آورده ایم .من با استفاده از الگوریتم MD5 رشته مورد نظرم را Code کرده ام
موفق باشی
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
:strange:
خوب عمو اینپرایز اگه اینطور باشه که اصلا به چه دردی می خوره ما hash کنیم؟ مگه xxx داریم چیزی بسازیم که با اولش بر نمیگرده؟
اول اینو بخون ، بعد اگر نظرت عوض شد ، روی نحوهء عملکردت تو این فروم تجدید نظر کن . فکر میکنم این کاریه که این روزا خیلیها باید انجامش بدن .
عصر خوش
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
پس برنامه johncracker چطوری پسوردهای لینوکس و پیدا میکنه ؟ مگه اونا هم بصورت md5 ذخیره نمیشن ؟
نحوهء ذخیره سازی به انتخاب کاربر و توزیع لینوکس بستگی داره . چند برنامه ای که پسوردها رو برمیگردونن ، یا زمانی عمل میکنند که Hashing اتفاق نیفتاده ، یا از Brute-Force استفاده میکنن ، که توضیحش اون بالا هست .چطوری پسوردهای لینوکس و پیدا میکنه ؟ مگه اونا هم بصورت md5 ذخیره نمیشن ؟
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
با سلام
عذر میخوام که topic جدید باز نکردم! :wink:
میخواستم بپرسم که md5 چند کاراکتر بر میگرداند؟ یعنی حداقل و حداکثر دارد؟ یا نه همیشه تعدادخاصی کاراکتر برمیگرداند!!؟
ممنونم./. :oops:
اگر به لینکی که داده شده بود می رفتی می دیدی که نوشته"
"MD5 روش برای تولید یک چکیده از یک پیام است ( Message Digest ) . چه یک کلمه ، یک عدد ، یک جمله ، یک کتاب چند صد صفحه ای ، یک فایل و ... به او بدهید ، یک چکیده با طول ثابت 128بیتی تولید میکند ."
هر ورودی که داده بشه خروجی 128 بیت خواهد بود!
پس با این وجود، یک فیلد 16 کاراکتری براش کافیه؟!! :wink:
اصلاح میکنم 128 بایتی!!!!هر ورودی که داده بشه خروجی 128 بیت خواهد بود!
خیلی برام عجیبه وقتی میبینم تا بحال حداقل سه بار در این مورد نوشته ام ؛ باز هم ...
همان "128 بیت" درست است .
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
باز هم اصلاح میکنم 128 بیتی !!!! :confy2: :sorry:اصلاح میکنم 128 بایتی!!!!
ار همتون متشکرم :oops:
سلام
بله اگر کلید را داشته باشید قابل برگشت است به روش غیر brute force. ضمنا MD5 که من یکبار کار کردم فکر کنم ۱۶ بایت خروجی دارد یعنی ۱۲۸ بیت. اگر داده شما هم کمتر یا مساوی همین تعداد بیت باشد و روی آن MD5 را اعمال کنید، با داشتن کلید آن میتوان به داده اولیه رسید. به عنوان مثال در پروتکل RADIUS مخصوص Access Server ها که من روی نوشتن سرورش کار میکردم پسورد به همین شکل کد و دیکد میشد. هر چند اصولا کاربرد الگوریتمهای Hashing این نیست و برای حفظ Integrity داده ها و امضای دیجیتالی و Checksum به کار میروند.
ممنون علی
البته اگر منظور شما Md5 است تا جایی که من اطلاع دارم کلیدی تولید نمی شود که با داشتن آن بتوان رشته هش شده را دیکد کرد.اصولا دیکد کردن عبارات هش شده بی معنیست.(کد نمشه که بخواد دیکد بشه)
در ضمن میزان حجم داده ربطی به توانایی در مورد استفاده از الگریتم های هشینگ ندارد.شما هر چیزی رو که به Md5 بدهید یک خروجی 128 بیتی همیشه ثابت و تقریبا منحصر به فرد (احتمال شباهت بین خروجی دو عبارت متفاوت خیلی کمه) به شما بر میگردونه
Artists use lies to tell the truth while politicians use them to cover the truth up
نوشته شده توسط Afshin_Zavar
اگر تو میتونی چیزی رو که کد کردی دیکد کنی بنابراین بقیه هم میتونن
برای نگه داری پسورد ها ، تهیه امضا برای تشخیص اعتبار داده موجود و... هش کردن بسیار راه گشاست.شخصا توصیه می کنم بنا بر برنامه و نحوه عملکردش از دو لایه (یا بیشتر) هشینگ استفاده کنید.مثلا ((('md5(sha1(md5('hello world
این کار دو فایده داره
گمراه کردن مهاجم و تلف کردن وقتش.
Artists use lies to tell the truth while politicians use them to cover the truth up
دو لایه هش!!! چرا آخه؟
منظور از گمراه کردن رو نمیدونم اما تلف کردن وقت همون یه مرحله رو هنوز کسی نشکسته که بخوایم دوتاش کنیم!این کار دو فایده داره
گمراه کردن مهاجم و تلف کردن وقتش.
چرا من تا به حال چندین بار یک رشته MD5 را که حاوی پسورد بود را با بروت فورس بدست آوردمنوشته شده توسط someCoder
منظور از گمراه کردن
من گاهی اگر واقعا لازم باشه رشته ای رو که توسط برنامه ذخیره میکنم که الاظاهر می تونه یک رشته sha1 یا md5 باشه اما فی اولواقع نیست
Artists use lies to tell the truth while politicians use them to cover the truth up
اینکه با بروت فورس شکستیش دلیلش امنیت کم پسورد انتخاب شده بوده، نه شکستن Md5 یا Sha1! چون اگر طرف 6 بار هم هش میکرد، تو هم توی بروت فورس از 6 بار هش استفاده میکردی.چرا من تا به حال چندین بار یک رشته Md5 را که حاوی پسورد بود را با بروت فورس بدست آوردم
اما اگر منظورت اینه که یه کاری بکنی که منطق برنامت رو کسی ندونه میشه قبول کرد. اما خوب شکستن رمز وقتی مطرح میشه که طرف الگوریتم رو میدونه.
سلامنوشته شده توسط houtanal
بله من چون خیلی وقت پیش روی این موضوع کار میکردم RADIUS Server که در اوونجا پسورد رو با MD5 یک کلمه رمز و شماره درخواست XOR میکرد بعد روی شبکه میفرستاد، اشتباه کردم. MD5 یک Hashing یک طرفه است.
در مورد میزان حجم داده و... من هم چیزی غیر از این نگفتم و دقیقا به همین مطلب اشاره کردم که اندازه داده ها هر قدر باشه MD5 آن ۱۲۸ بیت خواهد بود. مانند CRC32 که ۳۲ بیت خروجی دارد.
ممنون علی
به هر حال تو هیچ وقت نمیتونی امنیت چیزی رو صد در صد تضمین کنی.تنها کاری که میشه کرد پایین آوردن درصد ریسک است.تلف کردن وقت مهاجم یکی از این راه هاست.توجه کن که مهاجم برای این که بتونه در بنامش از همون الگوریتم لایه بندی تو استفاده کنه محبوره حداقل یک بار یکی از رشته های هش شده ات رو بدست بیاره.نوشته شده توسط someCoder
هر کسی با داشتن یک rainbow table خوب + یک سیستم سریع می تونه قوی ترین پسورد ها رو هم (احتمالا) بدست بیاره.
Artists use lies to tell the truth while politicians use them to cover the truth up
من اینطور فکر نمیکنم! حاضرم ثابت کنم! میخوای من یه رشته رو Hash کنم و یا مثلا با AED یا حتی 3DES روم کنم، اونوقت اگر کسی تونست کرکش کنه! هم ریاضی و هم تجربه نشون داده که نمیشه. مگر اینکه پسورد اونقدر ضعیف باشه که بشه حدسش زد.هر کسی با داشتن یک rainbow table خوب + یک سیستم سریع می تونه قوی ترین پسورد ها رو هم (احتمالا) بدست بیاره
اگر یک عبارت 2 بار MD5 بشه با قوی ترین سیستم ها هم مراحل کرک به هفته ها می کشه و به CPU آسیب می رسه . من روی قوی ترین و پرسرعت ترین سرور های لینوکس این قضیه رو تست کردم . می دونید Brute Force کردن یک عبارت 32 کارکتری یعنی چی ؟؟؟؟ یعنی فاجعه . امکان لو رفتنش خیلی کمه . و اما اگه 3 یا 4 بار هاش بشه امنیت کامل پسورد از نظر کرکینگ برقراره . در ضمن هیچ کلیدی در MD5 وجود نداره منظورم کلید Public و Priv8 هست . MD5 توسط یک پروفسور ریاضی طراحی شده و مشکلی برش وارد نیست .
اولا که اگر یک بار کد بشه کرک کردنش به قرنها میکشه! دیگه دو بارشو من درک نمیکنم چه صیغه ایه!اگر یک عبارت 2 بار MD5 بشه با قوی ترین سیستم ها هم مراحل کرک به هفته ها می کشه و به CPU آسیب می رسه .
ضمنا من تو کف این ماجرای سوختن CPU هستم!!!!!!!!!!!(و هزار تا علامنت تعجب دیگه!)
آخه چه ربطی داره ... به شقیقه!
قرنها؟؟!!!
احتمالا برات پیش نیومده که نیاز به این کار داشته باشی
Artists use lies to tell the truth while politicians use them to cover the truth up
اگر شک داری امتحانش مجانیه!
میخوای برات یه رشته Hash کنم و تونستی قبل از 100 سال دیگه برام کرکش کن!
در الگوریتم هش کردن یک آرایه مقدار دهی میشود (به کد زیر ) ؛ حال اگر این مقادیر رو من تغییر بدم مشکلی در نتیجه حاصله بوجود میاد یا نه
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
تا جایی که من میدونم مشکلی ایجاد نمیشه! فقط دیگه یه هش استاندارد نداریم! یعنی یه نتیجه دیگه به دست میاد که طبق تعریف هش بازم هش هست اما استاندارد نیست.
شاید بشه گفت یه هش شخصی! مثلا یه راهکار بجای اون روش دو بار هش کردن که اونم هدفش غیر استاندارد کردن خروجی بود.
البته فکر کنم اینطور باشه! مطمئن نیستم
مهم نیست که استاندارد نباشه ؛ مشکل نداشته باشه و بتونم ازش استفاده کنم کافیه
تا جایی که من میدونم نباید مشکلی پیش بیاد. البته بهتره اساتید هم در این مورد نظر بدن
تا جایی که من میدونم Md5 یه الگریتم یه طرفه است و بر نمی گرده
اینکه واضحه ؛ تمام بحثم از اول روی این محور میچرخه .نوشته شده توسط ICEMAN
مطالب رو از اول یکبار دیگه بخون به لینک استاد اینپرایز هم توجه کن
آقای زواری، حالا که این پست دوباره بالا اومد یادم اومد یه چیز دیگه هم در جوابتون اضافه کنم. اینکه گفتم فکر میکنم مشکلی نباید پیش بیاد به این دلیل بود که طبق منطق الگوریتم اینها فقط یه سری مقادیر برای استاندارد شدن هستند و استحکام این الگوریتم با این مقادیر اثبات شده است. اما اینکه گفتم شک دارم به این دلیل بود که ممکنه یه وقتی با انتخاب مقادیر اولیه نامناسب (شاید!!!) روشی برای کرک کردن پیدا بشه. البته این نظر شخصی منه و هیچ پایه علمی هم نداره. فقط یه حدسه.