21-05-14, 04:52 PM
لقد قمت بتعديل مثال "البحث عن 3 قيم وتعديل القيمة الثالثة" بحيث يقوم بحساب CRC-32 للملف بعد التعديل وتخزينها في المكان الذي أشرت إليه
وهذا كود Crc32 - منقول
المصدر: Calculate CRC32 of an String or Byte Array
كود :
Dim MyFileStream As IO.FileStream = Nothing
Try
'تعريف مسار الملف
MyFileStream = New IO.FileStream("D:\test.exe", IO.FileMode.Open, IO.FileAccess.ReadWrite)
'مصفوفة من البايت بحجم الملف
Dim Buffer(MyFileStream.Length - 1) As Byte
'المصفوفة المراد البحث عنها داخل الملف
Dim Find As Byte() = {&HFF, &HFF, &H10}
'قرائة الملف حتي النهاية
MyFileStream.Read(Buffer, 0, Buffer.Length)
Dim Index As Integer = 0
Do
Index = SearchByteArray(Buffer, Find, Index)
If Index <> -1 Then
'اسنبدال القيمة الثالثة بقيمة جديدة
Buffer(Index + 2) = &HFF
End If
Loop Until Index = -1
'الانتقال لبداية الملف
MyFileStream.Seek(&H0, IO.SeekOrigin.Begin)
'كتابة المصفوفة للملف بعد التعديل
MyFileStream.Write(Buffer, 0, Buffer.Length)
'للتأكد من أنه تم كتابة كل البيانات للملف
MyFileStream.Flush()
'حساب CRC-32 للملف بعد التعديل وتحويله لمصفوفة من البايت
Dim CRCBytes As Byte() = BitConverter.GetBytes(CRC32.ComputeChecksum(Buffer))
'الانتقال لموقع حفظ CRC-32
MyFileStream.Seek(&HC, IO.SeekOrigin.Begin)
'كتابة قيمة CRC-32 الجديدة للملف بعد التعديل
MyFileStream.Write(CRCBytes, 0, CRCBytes.Length)
Finally
If MyFileStream IsNot Nothing Then MyFileStream.Close()
End Try
وهذا كود Crc32 - منقول
كود :
Public Class Crc32
Shared table As UInteger()
Shared Sub New()
Dim poly As UInteger = &HEDB88320UI
table = New UInteger(255) {}
Dim temp As UInteger = 0
For i As UInteger = 0 To table.Length - 1
temp = i
For j As Integer = 8 To 1 Step -1
If (temp And 1) = 1 Then
temp = CUInt((temp >> 1) Xor poly)
Else
temp >>= 1
End If
Next
table(i) = temp
Next
End Sub
Public Shared Function ComputeChecksum(bytes As Byte()) As UInteger
Dim crc As UInteger = &HFFFFFFFFUI
For i As Integer = 0 To bytes.Length - 1
Dim index As Byte = CByte(((crc) And &HFF) Xor bytes(i))
crc = CUInt((crc >> 8) Xor table(index))
Next
Return Not crc
End Function
End Class
المصدر: Calculate CRC32 of an String or Byte Array