الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقه تشفير البيانات النصيه عن طريق مكتبه MD5

مغلق
بدأه GENIUS-IT في 15 أغسطس 2006 · 29 رد · 10,662 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

BSMR.gif

السلام عليكم ورحمه الله وبركاته

أخوانى الكرام أعضاء ومشرفين المنتدى

اليوم سوف اقوم بشرح طريقه تشفير البيانات النصيه عن طريق مكتبه Md5

وهى من اقوى مكتبات تشفير البيانات والتى لا يمكن فك تشفيرها مره أخرى

وهى تستخدم فى لغات PHP

المكتبه تقوم بتشفير اى نص إلى نص غير مفهوم يتكون من 32 حرف

أى كان عدد الحروف فى النص حرف مثل مئه لا يختلف ولا يمكن فك تشفيره مره أخرى

وهى من الممكن أستخدامها فى تشفير بينات المستخدمين مثلا فى برنامج له صلاحيات لكل مستخدم

حتى لا يستطيع اى أحد قرائه البيانات من القاعده

وها هى المكتبه وأيضا سوف أرفق مثال صغير عليها

ضع هذا الكود فى Class Module وسميه Md5

Option Explicit

Private lngTrack As Long
Private arrLongConversion(4) As Long
Private arrSplit64(63) As Byte

Private Const OFFSET_4 = 4294967296#
Private Const MAXINT_4 = 2147483647

Private Const S11 = 7
Private Const S12 = 12
Private Const S13 = 17
Private Const S14 = 22
Private Const S21 = 5
Private Const S22 = 9
Private Const S23 = 14
Private Const S24 = 20
Private Const S31 = 4
Private Const S32 = 11
Private Const S33 = 16
Private Const S34 = 23
Private Const S41 = 6
Private Const S42 = 10
Private Const S43 = 15
Private Const S44 = 21

Private Function MD5Round(strRound As String, a As Long, b As Long, C As Long, d As Long, x As Long, S As Long, ac As Long) As Long
	Select Case strRound
		Case Is = "FF"
			a = MD5LongAdd4(a, (b And C) Or (Not (b) And d), x, ac)
			a = MD5Rotate(a, S)
			a = MD5LongAdd(a, b)
		Case Is = "GG"
			a = MD5LongAdd4(a, (b And d) Or (C And Not (d)), x, ac)
			a = MD5Rotate(a, S)
			a = MD5LongAdd(a, b)
		Case Is = "HH"
			a = MD5LongAdd4(a, b Xor C Xor d, x, ac)
			a = MD5Rotate(a, S)
			a = MD5LongAdd(a, b)
		Case Is = "II"
			a = MD5LongAdd4(a, C Xor (b Or Not (d)), x, ac)
			a = MD5Rotate(a, S)
			a = MD5LongAdd(a, b)
	End Select
End Function

Private Function MD5Rotate(lngValue As Long, lngBits As Long) As Long
Dim lngSign As Long
Dim lngI As Long
	lngBits = (lngBits Mod 32)

	If lngBits = 0 Then MD5Rotate = lngValue: Exit Function

	For lngI = 1 To lngBits
		lngSign = lngValue And &HC0000000
		lngValue = (lngValue And &H3FFFFFFF) * 2
		lngValue = lngValue Or ((lngSign < 0) And 1) Or (CBool(lngSign And &H40000000) And &H80000000)
	Next

	MD5Rotate = lngValue
End Function

Private Function TRID() As String

	Dim sngNum As Single, lngnum As Long
	Dim strResult As String

	sngNum = Rnd(2147483648#)
	strResult = CStr(sngNum)

	strResult = Replace(strResult, "0.", "")
	strResult = Replace(strResult, ".", "")
	strResult = Replace(strResult, "E-", "")

	TRID = strResult

End Function

Private Function MD564Split(lngLength As Long, bytBuffer() As Byte) As String

	Dim lngBytesTotal As Long, lngBytesToAdd As Long
	Dim intLoop As Integer, intLoop2 As Integer, lngTrace As Long
	Dim intInnerLoop As Integer, intLoop3 As Integer

	lngBytesTotal = lngTrack Mod 64
	lngBytesToAdd = 64 - lngBytesTotal
	lngTrack = (lngTrack + lngLength)

	If lngLength >= lngBytesToAdd Then
		For intLoop = 0 To lngBytesToAdd - 1
			arrSplit64(lngBytesTotal + intLoop) = bytBuffer(intLoop)
		Next intLoop

		MD5Conversion arrSplit64

		lngTrace = (lngLength) Mod 64

		For intLoop2 = lngBytesToAdd To lngLength - intLoop - lngTrace Step 64
			For intInnerLoop = 0 To 63
				arrSplit64(intInnerLoop) = bytBuffer(intLoop2 + intInnerLoop)
			Next intInnerLoop

			MD5Conversion arrSplit64

		Next intLoop2

		lngBytesTotal = 0
	Else

	  intLoop2 = 0

	End If

	For intLoop3 = 0 To lngLength - intLoop2 - 1

		arrSplit64(lngBytesTotal + intLoop3) = bytBuffer(intLoop2 + intLoop3)

	Next intLoop3

End Function

Private Function MD5StringArray(strInput As String) As Byte()

	Dim intLoop As Integer
	Dim bytBuffer() As Byte
	ReDim bytBuffer(Len(strInput))

	For intLoop = 0 To Len(strInput) - 1
		bytBuffer(intLoop) = Asc(Mid(strInput, intLoop + 1, 1))
	Next intLoop

	MD5StringArray = bytBuffer

End Function

Private Sub MD5Conversion(bytBuffer() As Byte)

	Dim x(16) As Long, a As Long
	Dim b As Long, C As Long
	Dim d As Long

	a = arrLongConversion(1)
	b = arrLongConversion(2)
	C = arrLongConversion(3)
	d = arrLongConversion(4)

	MD5Decode 64, x, bytBuffer

	MD5Round "FF", a, b, C, d, x(0), S11, -680876936
	MD5Round "FF", d, a, b, C, x(1), S12, -389564586
	MD5Round "FF", C, d, a, b, x(2), S13, 606105819
	MD5Round "FF", b, C, d, a, x(3), S14, -1044525330
	MD5Round "FF", a, b, C, d, x(4), S11, -176418897
	MD5Round "FF", d, a, b, C, x(5), S12, 1200080426
	MD5Round "FF", C, d, a, b, x(6), S13, -1473231341
	MD5Round "FF", b, C, d, a, x(7), S14, -45705983
	MD5Round "FF", a, b, C, d, x(8), S11, 1770035416
	MD5Round "FF", d, a, b, C, x(9), S12, -1958414417
	MD5Round "FF", C, d, a, b, x(10), S13, -42063
	MD5Round "FF", b, C, d, a, x(11), S14, -1990404162
	MD5Round "FF", a, b, C, d, x(12), S11, 1804603682
	MD5Round "FF", d, a, b, C, x(13), S12, -40341101
	MD5Round "FF", C, d, a, b, x(14), S13, -1502002290
	MD5Round "FF", b, C, d, a, x(15), S14, 1236535329

	MD5Round "GG", a, b, C, d, x(1), S21, -165796510
	MD5Round "GG", d, a, b, C, x(6), S22, -1069501632
	MD5Round "GG", C, d, a, b, x(11), S23, 643717713
	MD5Round "GG", b, C, d, a, x(0), S24, -373897302
	MD5Round "GG", a, b, C, d, x(5), S21, -701558691
	MD5Round "GG", d, a, b, C, x(10), S22, 38016083
	MD5Round "GG", C, d, a, b, x(15), S23, -660478335
	MD5Round "GG", b, C, d, a, x(4), S24, -405537848
	MD5Round "GG", a, b, C, d, x(9), S21, 568446438
	MD5Round "GG", d, a, b, C, x(14), S22, -1019803690
	MD5Round "GG", C, d, a, b, x(3), S23, -187363961
	MD5Round "GG", b, C, d, a, x(8), S24, 1163531501
	MD5Round "GG", a, b, C, d, x(13), S21, -1444681467
	MD5Round "GG", d, a, b, C, x(2), S22, -51403784
	MD5Round "GG", C, d, a, b, x(7), S23, 1735328473
	MD5Round "GG", b, C, d, a, x(12), S24, -1926607734

	MD5Round "HH", a, b, C, d, x(5), S31, -378558
	MD5Round "HH", d, a, b, C, x(8), S32, -2022574463
	MD5Round "HH", C, d, a, b, x(11), S33, 1839030562
	MD5Round "HH", b, C, d, a, x(14), S34, -35309556
	MD5Round "HH", a, b, C, d, x(1), S31, -1530992060
	MD5Round "HH", d, a, b, C, x(4), S32, 1272893353
	MD5Round "HH", C, d, a, b, x(7), S33, -155497632
	MD5Round "HH", b, C, d, a, x(10), S34, -1094730640
	MD5Round "HH", a, b, C, d, x(13), S31, 681279174
	MD5Round "HH", d, a, b, C, x(0), S32, -358537222
	MD5Round "HH", C, d, a, b, x(3), S33, -722521979
	MD5Round "HH", b, C, d, a, x(6), S34, 76029189
	MD5Round "HH", a, b, C, d, x(9), S31, -640364487
	MD5Round "HH", d, a, b, C, x(12), S32, -421815835
	MD5Round "HH", C, d, a, b, x(15), S33, 530742520
	MD5Round "HH", b, C, d, a, x(2), S34, -995338651

	MD5Round "II", a, b, C, d, x(0), S41, -198630844
	MD5Round "II", d, a, b, C, x(7), S42, 1126891415
	MD5Round "II", C, d, a, b, x(14), S43, -1416354905
	MD5Round "II", b, C, d, a, x(5), S44, -57434055
	MD5Round "II", a, b, C, d, x(12), S41, 1700485571
	MD5Round "II", d, a, b, C, x(3), S42, -1894986606
	MD5Round "II", C, d, a, b, x(10), S43, -1051523
	MD5Round "II", b, C, d, a, x(1), S44, -2054922799
	MD5Round "II", a, b, C, d, x(8), S41, 1873313359
	MD5Round "II", d, a, b, C, x(15), S42, -30611744
	MD5Round "II", C, d, a, b, x(6), S43, -1560198380
	MD5Round "II", b, C, d, a, x(13), S44, 1309151649
	MD5Round "II", a, b, C, d, x(4), S41, -145523070
	MD5Round "II", d, a, b, C, x(11), S42, -1120210379
	MD5Round "II", C, d, a, b, x(2), S43, 718787259
	MD5Round "II", b, C, d, a, x(9), S44, -343485551

	arrLongConversion(1) = MD5LongAdd(arrLongConversion(1), a)
	arrLongConversion(2) = MD5LongAdd(arrLongConversion(2), b)
	arrLongConversion(3) = MD5LongAdd(arrLongConversion(3), C)
	arrLongConversion(4) = MD5LongAdd(arrLongConversion(4), d)

End Sub

Private Function MD5LongAdd(lngVal1 As Long, lngVal2 As Long) As Long

	Dim lngHighWord As Long
	Dim lngLowWord As Long
	Dim lngOverflow As Long

	lngLowWord = (lngVal1 And &HFFFF&) + (lngVal2 And &HFFFF&)
	lngOverflow = lngLowWord \ 65536
	lngHighWord = (((lngVal1 And &HFFFF0000) \ 65536) + ((lngVal2 And &HFFFF0000) \ 65536) + lngOverflow) And &HFFFF&

	MD5LongAdd = MD5LongConversion((lngHighWord * 65536#) + (lngLowWord And &HFFFF&))

End Function

Private Function MD5LongAdd4(lngVal1 As Long, lngVal2 As Long, lngVal3 As Long, lngVal4 As Long) As Long

	Dim lngHighWord As Long
	Dim lngLowWord As Long
	Dim lngOverflow As Long

	lngLowWord = (lngVal1 And &HFFFF&) + (lngVal2 And &HFFFF&) + (lngVal3 And &HFFFF&) + (lngVal4 And &HFFFF&)
	lngOverflow = lngLowWord \ 65536
	lngHighWord = (((lngVal1 And &HFFFF0000) \ 65536) + ((lngVal2 And &HFFFF0000) \ 65536) + ((lngVal3 And &HFFFF0000) \ 65536) + ((lngVal4 And &HFFFF0000) \ 65536) + lngOverflow) And &HFFFF&
	MD5LongAdd4 = MD5LongConversion((lngHighWord * 65536#) + (lngLowWord And &HFFFF&))

End Function

Private Sub MD5Decode(intLength As Integer, lngOutBuffer() As Long, bytInBuffer() As Byte)

	Dim intDblIndex As Integer
	Dim intByteIndex As Integer
	Dim dblSum As Double

	intDblIndex = 0

	For intByteIndex = 0 To intLength - 1 Step 4

		dblSum = bytInBuffer(intByteIndex) + bytInBuffer(intByteIndex + 1) * 256# + bytInBuffer(intByteIndex + 2) * 65536# + bytInBuffer(intByteIndex + 3) * 16777216#
		lngOutBuffer(intDblIndex) = MD5LongConversion(dblSum)
		intDblIndex = (intDblIndex + 1)

	Next intByteIndex

End Sub

Private Function MD5LongConversion(dblValue As Double) As Long

	If dblValue < 0 Or dblValue >= OFFSET_4 Then Error 6

	If dblValue <= MAXINT_4 Then
		MD5LongConversion = dblValue
	Else
		MD5LongConversion = dblValue - OFFSET_4
	End If

End Function

Private Sub MD5Finish()
Dim dblBits As Double
Dim arrPadding(72) As Byte
Dim lngBytesBuffered As Long

	arrPadding(0) = &H80
	dblBits = lngTrack * 8

	lngBytesBuffered = lngTrack Mod 64

	If lngBytesBuffered <= 56 Then
		MD564Split (56 - lngBytesBuffered), arrPadding
	Else
		MD564Split (120 - lngTrack), arrPadding
	End If


	arrPadding(0) = MD5LongConversion(dblBits) And &HFF&
	arrPadding(1) = MD5LongConversion(dblBits) \ 256 And &HFF&
	arrPadding(2) = MD5LongConversion(dblBits) \ 65536 And &HFF&
	arrPadding(3) = MD5LongConversion(dblBits) \ 16777216 And &HFF&
	arrPadding(4) = 0
	arrPadding(5) = 0
	arrPadding(6) = 0
	arrPadding(7) = 0

	MD564Split 8, arrPadding
End Sub

Private Function MD5StringChange(lngnum As Long) As String
Dim bytA As Byte
Dim bytB As Byte
Dim bytC As Byte
Dim bytD As Byte
	 bytA = lngnum And &HFF&
	 If bytA < 16 Then
		 MD5StringChange = "0" & Hex(bytA)
	 Else
		 MD5StringChange = Hex(bytA)
	 End If

	 bytB = (lngnum And &HFF00&) \ 256
	 If bytB < 16 Then
		 MD5StringChange = MD5StringChange & "0" & Hex(bytB)
	 Else
		 MD5StringChange = MD5StringChange & Hex(bytB)
	 End If

	 bytC = (lngnum And &HFF0000) \ 65536
	 If bytC < 16 Then
		 MD5StringChange = MD5StringChange & "0" & Hex(bytC)
	 Else
		 MD5StringChange = MD5StringChange & Hex(bytC)
	 End If

	 If lngnum < 0 Then
		 bytD = ((lngnum And &H7F000000) \ 16777216) Or &H80&
	 Else
		 bytD = (lngnum And &HFF000000) \ 16777216
	 End If

	 If bytD < 16 Then
		 MD5StringChange = MD5StringChange & "0" & Hex(bytD)
	 Else
		 MD5StringChange = MD5StringChange & Hex(bytD)
	 End If
End Function

Private Function MD5Value() As String
	MD5Value = LCase(MD5StringChange(arrLongConversion(1)) & MD5StringChange(arrLongConversion(2)) & MD5StringChange(arrLongConversion(3)) & MD5StringChange(arrLongConversion(4)))
End Function

Public Function CalculateMD5(strMessage As String) As String
Dim bytBuffer() As Byte
	bytBuffer = MD5StringArray(strMessage)
	MD5Start
	MD564Split Len(strMessage), bytBuffer
	MD5Finish
	CalculateMD5 = MD5Value
End Function

Private Sub MD5Start()
	lngTrack = 0
	arrLongConversion(1) = MD5LongConversion(1732584193#)
	arrLongConversion(2) = MD5LongConversion(4023233417#)
	arrLongConversion(3) = MD5LongConversion(2562383102#)
	arrLongConversion(4) = MD5LongConversion(271733878#)
End Sub

ثم قم بأضافه فورم جديد وأضيف عليه زر و 2 تيكست

أكتب الكود التالى التالى فى الزر

Dim x As New Md5
Text2.Text = x.CalculateMD5(Text1.Text)

وفى المرفقات مثال على المكتبه

MD5.rar

تم تعديل هذه المشاركة بواسطة GENIUS-IT في 15 أغسطس 2006 في 17:34

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#2

جزاك الله خيراً أخي GENIUS-IT

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#3

جزالك الله خيرا

Linux System Admin

#4

السلام عليكم

مشكورين أخوانى على الردود

أرجو ان تكونو أستفدتم من الموضوع

فى أنتظار تفاعل باقى الأعضاء

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#5

السلام عليكم ورحمة الله وبركاته,

ساتفاعل انا معك طالما هذه المسائل من اولى اهتماماتي

اولا يعطيك العافية على هذا الموضوع, لدي بعض النقاط في ذهني التي اريد ان اذكرها..

MD5 ليست خوارزمية تشفير وانما خوارزمية حساب توقيع رقمي خاص بالبيانات input

اي انها مشابه لـ SHA, CRC, وغيرها المستخدمة ايضا بكثاقة..

بمعنى, ليكن المدخل GENIUS والخوارزمية MD5 تحصل على توقيع D1EC37E093E6BB958E7DA3F02C69ADD2

هذا التوقيع سيميز اسمك فقط ولا يمكن ان يتشابه مع اي كلمة اخرى على الاطلاق

لتوضيح الفكرة اكثر دعني اوضح لماذا هي مستخدمة في تطبيقات الويب كلغة PHP ؟

السبب, هي انها تستخدم في حساب توقيع رقمي لكلمة السر عند تسجيل حساب اول مرة في المنتدى, وبدل ان يتم حفظ كلمة السر كما هي بصورة واضحة في قاعدة البيانات يتم حفظ التوقيع الرقمي.

الان عندما يتم تسجيل الدخول فان المتصفح يرسل كلمة السر الواضحة الى التطبيق البرمجي على الانترنيت, ليقوم الاخير بحساب توقيع رقمي بنفس الخوارزمية لهذه الكلمة ومن ثم يقارن التوقيع المحسوب مع المخزن في قاعدة البيانات

هذا يفيد في عدة نواح:

1- سرقة بيانات من القاعدة لن يكشف كلمات سر واضحة.

2- عملية التنصت على الحزم عبر الشبكة لن تكشف بيانات واضحة.

اقتباس
"لا يمكن فك تشفيرها مرة أخرى"

غير دقيقة, يمكن اتباع هجوم bruteforce حيث يتم توليد توقيعات لنفس الخوارزمية لو انت متاكد انها MD5 لكلمات عشوائية كبيرة العدد تصل الى ملايين.

ومن ثم مقارنة هذه التواقيع مع ما لديك الى ان يتطابق شئ ما والنسبة حسب الاحتمالات وعددها ستختلف, عندما يتطابق التوقيع فانت تعلم انه يتبع للكلمة الفلانية الصريحة.. وبهذا تقضي على التوقيع الرقمي الذي في الاصل لم يصمم لمكافحة هجمات bruteforce بالاصل.

اوه هل ساجلس ساعات لاكتب برنامج bruteforce جيد!!؟

لا في الواقع, هناك الكثير واشهرها Rainbow Crack الذي يجمع امكانية محاولة كشف كلمات مشفرة بخوارزميات عديدة ستفرح لو حصلت على توقيع باحداها!

اخيرا, طالما انك تكلمت عن "شرح" للاستخدام, فلم لا تشرح اساسيات ومفاهيم MD5 على الاقل, وجهة نظر, لانها تدعم الموضوع ولا تجعل من يتصفحه يخرج بدون اي شئ في الجيب!

والسلام عليكم

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#6
Xacker كتب:
بمعنى, ليكن المدخل GENIUS والخوارزمية MD5 تحصل على توقيع D1EC37E093E6BB958E7DA3F02C69ADD2

هذا التوقيع سيميز اسمك فقط ولا يمكن ان يتشابه مع اي كلمة اخرى على الاطلاق

في هذه النقطة سوف أختلف معك.

فعدد عدد المدخلات التي تؤدي الى نفس قيمة الهاش هو عد لا نهائي.

حتى أنه في حال معرفتك أن مدخلين x و x لهما نفس قيمة الهاش فانه يمكن توليد عدد لانهائي من المدخلات التي تولد نفس الهاش وذلك عن طريق اضافة نفس البايتات الى نهاية المدخلين. أي

mimetex.cgi?hash(x) = hash(y) \Rightarro

وهذا شي منطفي فعدد الحالات المحتلفة لقيمة الهاش هو عدد كبير جدا لكنه نهائي بسبب كون قيمة المخرج ذو طول ثابت بينما طول المدخل متغير ونطريا لانهائي.

أرجو ملاحضة أنني هنا لا أتحدث عن مدخلات نصية فقط. بل عن بايتات. فخورزمية الهاش بتقوم ب..... هشهشة :D بايتات.

هذه الحالة (أي وجود مدخلين مختلفين بنفس قسمة الهاش) تسمى ب collision

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#7

لم اقرا من قبل عن اكتشاف بيانات صريحة مختلفة تعطي نفس التوقيع, فهل لديك مرجع ما؟

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8

السلام عليكم ورحمة الله وبركاته

شكرا اخي GENIUS-IT على الموضوع الجميل

ولكن كما ذكر اخي Xacker انه بالفعل توجد برامج جاهزة وكثيرة جدا لفك التشفير باستخدام Bruteforce

وهناك ايضا برنامج مكتوب بالفيجوال بيزك لعمل ذلك

كما اني اذكر انه كان لدي موقع ما تقوم بتسجيل قيمة الهاش فيه وبعد ايام يكون قد فكها (وهذا الموقع غالبا ما يستخدمه الهاكرز )

ولذلك أنصح بعدم استخدام هذه التقنية في التشفير وحدها ولكن قم بتغيير القيمة المدخلة قبل ارسالها لدالة الـMD5

على سبيل المثال قم بوضعها هكذا

Dim x As New Md5

Text2.Text = x.CalculateMD5("mynumbers" & Text1.Text & "Myaddtext")

كما يمكنك مثلا ان تقوم بعكس القيمة المدخلة قبل ارسالها وهناك طرق عديدة وذلك لكي تقوم بتضليل من يحاول فك التشفير بقدر الامكان

-------------

اخي Xacker قرأت بعض مشاركاتك عن كسر حماية البرامج وخاصة اذا كانت تستخدم If في وضع الشرط فماذا لو كان الشرط لا يستخدم If ولا Swich

ولكن باستخدام مثلا Do Until

فهل ذلك يساعد على زيادة الصعوبة في كسر حماية البرنامج ؟

أنا على يقين 100% انه لا توجد حماية كاملة وان اي برنامج او موقع يمكن تخطيه وكسر حمايته ولكن غرضي من السؤال هو زيادة الصعوبة بقدر الامكان , على الاقل أمنع الكراكرز المبتدأين من العبث في البرنامج

وياريت لو عندك طرق جيدة للحماية تذكرها حتى نستفيد أكثر .. ولك جزيل الشكر

بالتوفيق لكم جميعا :)

==============

الى اللقاء

JusT LeT YouR MinD WorK

#9

السلام عليكم

أشكر كل من تفاعل معى فى الموضوع MR^King , Xacker , DotNetExpert

وشكر خاص مره أخرى للأخ العزيز Xacker على شرحه الجميل

ولكن لى إضافه كما قال الأخ MR^KING

انه يمكن تشفير النص وإضافه نص إليه ويمكن أيضا انا تقوم بتشفير النص مره أخرى بعد تشفيره

وهذا من الممكن ان يصعب الأمر شويه

ولا انتم ايه رأيكم

وجزاكم الله كل خير

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#10
اقتباس
اخي Xacker قرأت بعض مشاركاتك عن كسر حماية البرامج وخاصة اذا كانت تستخدم If في وضع الشرط فماذا لو كان الشرط لا يستخدم If ولا Swich

ممكن روابط و جزاكم الله خيراً .

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#11

السلام عليكم ورحمة الله وبركاته

تفضل اخي كومفورت هذا الموضوع وبه مناقشة رائعة

/index.php?showtopic=70729

ارجو ان تستفيد منها

==============

الى اللقاء

JusT LeT YouR MinD WorK

#12
MR^King كتب:
السلام عليكم ورحمة الله وبركاته

اخي Xacker قرأت بعض مشاركاتك عن كسر حماية البرامج وخاصة اذا كانت تستخدم If في وضع الشرط فماذا لو كان الشرط لا يستخدم If ولا Swich

ولكن باستخدام مثلا Do Until

فهل ذلك يساعد على زيادة الصعوبة في كسر حماية البرنامج ؟

==============

الى اللقاء

"زيادة" هذه الكلمة ستكون موجودة دوما ناهيك عن اننا لا نتبع IF او SWITCH او غيرها.. نحن فقط نتبع الاجرائيات مثلا النقر على زر التسجيل ومن ثم نبدا بتشكيل صورة لما كانت عليه الشفرة من خلال ما لدينا من استخدام للدوال, لم لا تكتب ملف يستخدمها وسارى ما الوقت اللازم لقرصنته؟

GENIUS-IT كتب:

انه يمكن تشفير النص وإضافه نص إليه ويمكن أيضا انا تقوم بتشفير النص مره أخرى بعد تشفيره

وهذا من الممكن ان يصعب الأمر شويه

"زيادة" الصعوبة فقط

هذا طبعا لو اردت ان اقوم بفك "التشفير" وليس ان اتجاوز مسالة حماية البرنامج مثلا

مع تحفظي على استخدام كلمة تشفير عندما يتعلق الامر بـ MDx واخوتها

السلام عليكم

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#13

السلام عليكم

انا لا أعرف ما المصطلح المفترض قوله على طريقه عمل Mdx

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#14
Xacker كتب:
لم اقرا من قبل عن اكتشاف بيانات صريحة مختلفة تعطي نفس التوقيع, فهل لديك مرجع ما؟

في الموقع التالي يوجد بعض الأمثلة بل وتوجد طريقة توليد مستندات مختلفة تعطي نفس قيمة الهش

http://www.win.tue.nl/~bdeweger/CollidingCertificates/

وكما قلت سايقا الأمر منطقي. فطول المخرج هو 32 حرفا (أو بالأصح 128 بتا) فان اردنا حساب قية الهش لنص بطول 33 حرفا فانه سيكون لدينا عدد النصوص المقبولة لمدخل هو 64 ضعفا من عدد النصوص التي سيولدها الهاش. ولهذا فانه ليس هناك مهرب من وجود مدخلات مختلفة تعطي نفس قيمة الهاش.

تم تعديل هذه المشاركة بواسطة DotNetExpert في 16 أغسطس 2006 في 22:24

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#15

السلام عليكم ورحمة الله وبركاته

شكرا اخي العزيز Xacker على اهتمامك بالرد

سأحاول اعداد مثال بسيط وأترك لك المحاولة لفكه طبعا الموضوع ليس موضوع تحدي ولكن كل مافي الامر انني ابحث عن

طريقة جيدة تزيد من حماية البرنامج قدر الامكان وانا اعرف تماما ان لغة الأسمبلي تعتبر كلمة السر في كسر حماية البرامج ... أليس كذلك ؟

عموما سأقوم باعداد مثال بسيط وأريد رأيكم هل نقوم بفتح موضوع جديد نناقش فيه هذا الأمر ام نستمر هكذا ؟

ولو موافقين على الفكرة فياريت اخي GENIUS-IT يقوم بفتح الموضوع لأنه صاحب الموضوع الحالي :)

بالتوفيق جميعا

===============

الى اللقاء

JusT LeT YouR MinD WorK

#16

السلام عليكم

أخونى الكرام

كلمه شكر قليله جدا على تفاعلكم معى جعله الله لكم فى ميزان حسناتكم

وبالنسبه لموضوع التشفير هل من الأفصل أستخدام كلمه Hash لتدل على المعنى الصحيح

اما بالنسبه لفتح موضوع جديد عن الحمايه

فانا اول من يوافق على هذا ومش هنختلف لو اى حد فتح الموضوع انا او انتم كلنا واحد ومنتظر موافقتكم

ولكن لى طلب ان نكمل موضوع الحمايه على Vb6 وأيضا نقوم بتنفيذه على على Vb.Net

لتعم الأفاده

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#17

مثال عن قيمتين مختلفتين تولدان نفس قسمة الهاش

$vec1 = h2b("
d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c
2f ca b5 87 12 46 7e ab 40 04 58 3e b8 fb 7f 89
55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 71 41 5a
08 51 25 e8 f7 cd c9 9f d9 1d bd f2 80 37 3c 5b
d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6
dd 53 e2 b4 87 da 03 fd 02 39 63 06 d2 48 cd a0
e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 a8 0d 1e
c6 98 21 bc b6 a8 83 93 96 f9 65 2b 6f f7 2a 70
");
$vec2 = h2b("
d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c
2f ca b5 07 12 46 7e ab 40 04 58 3e b8 fb 7f 89
55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 f1 41 5a
08 51 25 e8 f7 cd c9 9f d9 1d bd 72 80 37 3c 5b
d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6
dd 53 e2 34 87 da 03 fd 02 39 63 06 d2 48 cd a0
e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 28 0d 1e
c6 98 21 bc b6 a8 83 93 96 f9 65 ab 6f f7 2a 70
");

المصدر.

http://www.doxpara.com/md5_someday.pdf

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#18

اها, مقال وتفسير جميل, شكرا DotNetExpert على المعلومة الجديدة :)

اما بالنسبة لمسالة فتح موضوع جديد.. مسالة حتكون مملة وطويلة بصراحة

خلو النقاش هون رغم انه سيكون بنفس مسار النقاش بموضوع الاخ هاني تقريبا

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#19

السلام عليكم

أولاً أشكر الأخ الفاضل GENIUS-IT على هذا الموضوع ...

و عندي استفسار على ضوء ما تفضل به الإخوة هنا

* هل كلمات السر (العربية) في مأمن من كسرها إذا كانت تستخدم نفس الخوارزمية MD5 أم أنه لا علاقة ؟

===

* في معظم المنتديات VB يستخدم التشفير md5 مرتين مع اضافة قيمة salt فيتم التشفير الأولي لكلمة السر ثم تضاف قيمة salt و هو رقم يميز العضو بالمنتدى ثم يعاد تشفيره مرة أخرى ثم يتم تخزينة في قاعدة البيانات .

فلماذا لا نستخدم نفس الفكرة بالنسبة للبيانات ...

#20

السلام عليكم

أخوانى الكرام انا أشكركم بشده

ولكن للأسف انا مسافر لمده أسبوع ولن أستطيع انا اتابع الموضوع

سوف أبذل قصارى جهدى لمتابعه الموضوع من الخارج ولكن أرجو لن تكملوا مسيره المشاركات

وان تعتبرونى الحاضر الغائب

وجزاكم الله كل خير

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#21
اقتباس
* هل كلمات السر (العربية) في مأمن من كسرها إذا كانت تستخدم نفس الخوارزمية MD5 أم أنه لا علاقة ؟

لا طبعا ليست بمأمن لانه يمكن توليد احتمالات للحروف العربية ايضا

اقتباس
* في معظم المنتديات VB يستخدم التشفير md5 مرتين مع اضافة قيمة salt فيتم التشفير الأولي لكلمة السر ثم تضاف قيمة salt و هو رقم يميز العضو بالمنتدى ثم يعاد تشفيره مرة أخرى ثم يتم تخزينة في قاعدة البيانات .

مثلا

 [pass] > signing > [hash][mid] > signing > [salted hash]

لنفرض حصلت على الـ salted hash, هو قيمة MDx في النهاية, تحاول الحصول على القيمة الخاصة بالـ hash مع mid قبل ان يتم توقيعها عبر الـ bruteforce, ان حصلت عليها نظرت الى نسخة المنتدى لتعرف كيف يتم استخدام الـ salt واين (بسيطة, اقرا شفرات الصفحات!)

فتعلم اين هو الـ salt واين الـ hash .. ماذا بقي غير عملية اعتيادية؟

الفكرة في المنتديات هي استخدام MDx فقط لحماية عملية المقارنة اثناء تسجيل الدخول او حماية كلمات السر من كشفها بسهولة لم تم تسريب جزء من قاعدة البيانات بشكل او باخر.. هنا نتكلم في الفيجوال عن "تشفير" فهل ستفيدنا MD5 ؟ لا طبعا.. لذا يرجى تحديد المسار قبل ان نتابع!

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#22

شكراً جزيلاً أخي الفاضل Xacker على التعليق و التوضيح

تم تعديل هذه المشاركة بواسطة الفريد في 17 أغسطس 2006 في 22:52

#23

أشكر الجميع على برنامج التشفير المرفق وسوف أقوم بعمل بعض التعديلات عليه ليكون التشفير بنص مفهوم

وليس بحروف ورموز لا معنى لها أي سأحاول تطبيق الcryptographyفإذا كان لديكم اي اقتراحات أرجو طرحها في موضوع قد قمت برفعه في المنتدى بعنوان(التشفير أو cryptography بلغة الفيجوال بيسك 6وانا باتظار ردودكم ومقترحاتكم

رشا

#24

السلام عليكم

هل من الممكن إعادة تفعيل هذا الموضوع ونقوم بشرح أكثر تفصيل لسطور خوارزمية md5المرفقة هنا لكي نفهم أكثر في أي السطور تمت عملية التشفير وما معنى هذه السطور

ولكم جزيل الشكر

رشا

#25

كل ده جميل بس فى حاجة كلنا نسيناها و هى عكس التشفير بمعنى لو أنا أستخدمت المكتبة المرفقة فى الموضوع لتشفير أسمى , أزاى أرجع البيانات دى لأسمى علشان البرنامج يستخدمها , يبقى المكتبة ناقصة , ولا ايه ؟؟؟؟!!!!!!!!!!!!!

هذا الموضوع مغلق.

مواضيع مشابهة