إهتتمت بالبحث خلال العديد من المنتديات العربية والاجنبية عن حل لهذه المشكلة و إقتصرت علي حلين اما قراءة مسلسل المحركpartition او قراءة مسلسل القرص الصلب لكن لاتعمل مع الاقراس من النوع sata وايضا تعمل فقط مع vb6
لذا اقدم لكم مكتبة ( منقولة للامانة) ولكن قمت ببعض التعديلات عليها وهي تعمل حاليا علي
windows xp
harddisk sata , ata
visual studio 2002,2005,2008,2010
واترك باقي الاحتمالات لتجربتكم
إسم المكتبة Interop.HWINFOCOMLib.dll
بالطبع يلزم مسبقا قبل استخدامها ان تضاف الي مسجل الــ windows
فقط اكتب في قائمة run
regsvr32 %SystemRoot%\System32\Interop.HWINFOCOMLib.dll
وبعد ذلك يمكنك إستيرادها كمرجع داخل مشروعك من قائمة add reference داخل visual studio
ولمعرفة رقم مسلسل القرص الخاص بك
Dim harddiskserial As New HWINFOCOMLib.HD dim ser as string = harddiskserial.serialnumber
المتغير ser يحتوي علي رقم مسلسل الخاص بالمصنع للقرص الاساسي علي الجهاز
كما ايضا ارفق مع الموضوع مكتبة
Chilkat
وهي اعتبرها من ناحيتي انها افضل مكتبة علي الإطلاق في كل المجالات التي نتعامل معها
مميزات المكتبه
مكتبة الــ Chilkat
الموقع الرسمي للمكتبة
فوائد المكتبة
Bounced Mail
Bz2
Character Encoding
CSV
Digital Certificates
Digital Signatures
FTP
HTML to XML
HTTP
IMAP
Encryption
MHT / HTML Email
POP3
PFX
RSA
S/MIME
SMTP
Socket
Spider
SSH
SSH Tunnel
SSH Key
SFTP
Tar Archive
Upload
XML
XMP
Zip Compression
Misc
وبالطبع من اهم هذه المميزات التشفير encryption وإرسال البريد الإلكتروني smtp
وضغط الملفات بصورة zip , rar ,tar,7z بكلمة مرور او بدون
يمكنكم مراجعة شرح المكتبة وكل الدوال بها علي حدي من علي الموقع الخاص بها
chilkatsoft.com
المكتبة مجانية تماما (ليست للدعايا وانما للإفادة العامة)
اولا الـــ Encryption
انا عارف اهمية التشفير في الموضوع ده قد ايه علشان كده هبتدي بيه
بس قبل ما ابدأ لازم نعرف اننا لازم نضيف المكتبة كمرجع داخل المشروع
وطبعا كنوع من تنظيم مشروعك يفضل ان كل ما هو يتعلق بالتشفير يكون في class خارجي علشان تقدر تستخدمه بعد كده
وانا من ناحيتي هسهل عليكم طرق الإستخدام جدا جدا بس المهم انكم تستخدموا صح!!!
هفترض ان في class مخصصة للتشفير داخل مشروعك ولنفترض انها ENCODING_CLASS
وكل طريقة او ميزة للمكتبة هستخدمها في هيئة داله داخل ال class و برضه هوريكم ازاي تستخدموا الclass دي
علي فكرة في 200 طريقة تشفير جوه المكتبة انا هشرح 3 منهم و الباقي تقدروا تفهموه من عل الموقع
1- blowfish2
ودي انا عن نفسي بعتبرها من اصعب دوال التشفير في الكسر و من اكثرها امانا
طبعا مش هدخل في التفاصيل (لو حد عاوز يعرف اي حاجه زياده عنها يسأل)
الإستخدام
دالة التشفير
الداله التي سيتم وضعها في الــ class
Function cryp2(ByVal inp As String, ByVal i As Integer) As String
Dim crypt As New Chilkat.Crypt2()
Dim success As Boolean
success = crypt.UnlockComponent("Anything for 30-day trial")
crypt.CryptAlgorithm = "blowfish2"
' CipherMode may be "ecb", "cbc", or "cfb"
crypt.CipherMode = "cbc"
' KeyLength (in bits) may be a number between 32 and 448.
' 128-bits is usually sufficient. The KeyLength must be a
' multiple of 8.
crypt.KeyLength = 128
' The padding scheme determines the contents of the bytes
' that are added to pad the result to a multiple of the
' encryption algorithm's block size. Blowfish has a block
' size of 8 bytes, so encrypted output is always
' a multiple of 8.
crypt.PaddingScheme = 0
' EncodingMode specifies the encoding of the output for
' encryption, and the input for decryption.
' It may be "hex", "url", "base64", or "quoted-printable".
crypt.EncodingMode = "hex"
' An initialization vector is required if using CBC or CFB modes.
' ECB mode does not use an IV.
' The length of the IV is equal to the algorithm's block size.
' It is NOT equal to the length of the key.
Dim ivHex As String
ivHex = "0001020304050607"
crypt.SetEncodedIV(ivHex, "hex")
' The secret key must equal the size of the key. For
' 256-bit encryption, the binary secret key is 32 bytes.
' For 128-bit encryption, the binary secret key is 16 bytes.
Dim keyHex As String
keyHex = "000102030405060708090A0B0C0D0E0F"
crypt.SetEncodedKey(keyHex, "hex")
If i = 0 Then
Return (crypt.EncryptStringENC(inp))
Else
Return (crypt.DecryptStringENC(inp))
End If
End Functionويعدين هنطلب الداله . بس في إضافه انا عاملها و هي ان الداله دي هي اللي بتشفر و بتفك التشفير و الفرق في المتغير i
بمعني اني لما اطلب الدالة لو i ب 0 يبقي الداله هترجعلك ناتج التشفير و لو ب 1 هترجعلك ناتج فك التشفير
الطريقة الثانية
2- AES
ودي طريقة بتعتمد علي معادلة الــ salt ودي معادلة شهرتها في ان طريقة التشفير مبنية علي كلمة سر بتستخدمها في التشفير ودي اهم بكتييييييير من اي حاجة في المعادله
والناتج مش unique يعني كل مرة ناتج تشفير شكل لكن المتعة في ان ناتج فك التشفير ثابت و دي طريقة روعة ----- طول التشفير 128 بت زي اللي قبلها
وطبعا كل الفارق مابينها و مابين اللي قبلها هي الداله اللي هستخدمها و الباقي نفس الشرح السابق
دالة التشفير
Function crypt_file(ByVal inp As String, ByVal i As Integer) As String
Dim crypt2 As New Chilkat.Crypt2()
crypt2.UnlockComponent("anything for 30-day trial")
crypt2.CryptAlgorithm = "aes"
crypt2.EncodingMode = "base64"
crypt2.KeyLength = 128
crypt2.SecretKey = crypt2.GenerateSecretKey("jsa2jack1@1!")
If i = 0 Then
Return (crypt2.EncryptStringENC(inp))
Else
Return (crypt2.DecryptStringENC(inp))
End If
End Functionوهي كمثيل سابقتها
الطريقة الثالثة والأخيرة
3-3des
ودي طريقة بتقوم بالتشفير 3 مرات لكل بلوك بالــ blowfish و طبعا مش هعد في المميزات لكن العيب الوحيد انها ممكن تاخد وقت طويل في فك التشفير ( مش كتير حوالي 10 ثواني بس طبعا بالنسبة لنا الوقت عامل مهم وفي الاول والاخر المعالج له دوره!!)
وطبعا مش محتاج الا ان اضيف الدالة والباقي انتم عارفينه
دالة التشفير
Function cryp_db(ByVal inp As String, ByVal i As Integer) As String
Dim crypt As New Chilkat.Crypt2()
Dim success As Boolean
success = crypt.UnlockComponent("Anything for 30-day trial")
' Specify 3DES for the encryption algorithm:
crypt.CryptAlgorithm = "3des"
' CipherMode may be "ecb" or "cbc"
crypt.CipherMode = "ecb"
' Set the key length
crypt.KeyLength = 112
' Choose a padding scheme...
crypt.PaddingScheme = 0
' EncodingMode specifies the encoding of the output for
' encryption, and the input for decryption.
' It may be "hex", "url", "base64", or "quoted-printable".
crypt.EncodingMode = "hex"
' An initialization vector is required if using CBC or CFB modes.
' ECB mode does not use an IV.
' The length of the IV is equal to the algorithm's block size.
' It is NOT equal to the length of the key.
Dim ivHex As String = "0001020304050607"
crypt.SetEncodedIV(ivHex, "hex")
' The secret key must equal the size of the key.
' Remember, DES (i.e. 3DES) uses a parity bit in the key,
' so 112-bit 3DES requires 128 bits of key material
' (i.e. 16 bytes)
Dim keyHex As String = "11265395389c904862912aba16d315b8"
crypt.SetEncodedKey(keyHex, "hex")
If i = 0 Then
Return (crypt.EncryptStringENC(inp))
Else
Return (crypt.DecryptStringENC(inp))
End If
End Functionثانيا
email sender
تحتوي هذه المكتبة الرائعة علي طريقة لإرسال البريد الإلكتروني وطبعا الميزة دي مهمة للمبرمجين المحترفين (يعني لو عوز البرنامج يبعتلك مثلا كود التسحيل عن طريق البريد )
ودالهة الارسال بتاخد الرسالة و الايميل المرسل ليه و إسم المستخدم الخاص بالايميل وكلمة السر و smtp server و بورت الارسال
طبعا اللي فاهمين اكيد يعرفوا البيانات دي لكن اللي مش فاهمين احب اقولهم انك مش كل انواع الإيميل بتدعم smtp (simple mail transfer protocol )
انا هوصف ايميل جوجل لانه بيدعم الخاصية دي كمثال
كود الداله
Function sendmail(ByVal body As String, ByVal emailto As String, ByVal userr As String, ByVal passs As String, ByVal smtp As String, ByVal portf As Integer)
Dim mailman As New Chilkat.MailMan()
Dim success As Boolean = mailman.UnlockComponent("Hello World")
mailman.SmtpHost = smtp
mailman.SmtpPassword = passs
mailman.SmtpUsername = userr
mailman.SmtpSsl = True
mailman.SmtpPort = portf
Dim email As New Chilkat.Email()
email.Body = body
email.Subject = "email subject"
email.AddTo("to name", emailto)
email.From = "from name"
' Send mail.
success = mailman.SendEmail(email)
If success Then
MessageBox.Show("تم إرسال رسالة ")
Else
MessageBox.Show(mailman.LastErrorText)
End If
End Functionولنفترض ان إسم الكائن المنبثق من الــ class هو obj
فتكون هذه طريقة إستدعائها (وضعت بريد الكتروني خاص للتوضيح علي الــ gmail)
obj.sendmail("emailbody", "example@gmail.com", "username", "password", "smtp.gmail.com", 465)ثالثا
FTP upload and download
طبعا كلنا عارفين اننا ممكن نحتاج للبرنامج انه يرفع ملفات للنت زي مثلا التقارير او نسخ إحتياطية لقواعد البيانات ......الخ
وبقدملكم طريقه لرفع و تنزيل الملفات من علي الويب بإستخدام المكتبة
دالة الرفع upload و التنزيل download
function uploadfile(byval file_name as string, byval i as integer)
Dim ftp As New Chilkat.Ftp2()
Dim success As Boolean
' Any string unlocks the component for the 1st 30-days.
success = ftp.UnlockComponent("Anything for 30-day trial")
ftp.Hostname = "ftp.chilkatsoft.com"
ftp.Username = "****"
ftp.Password = "****"
' The default data transfer mode is "Active" as opposed to "Passive".
' Connect and login to the FTP server.
success = ftp.Connect()
If (success <> true) Then
MsgBox(ftp.LastErrorText)
Exit Sub
End If
' Change to the remote directory where the file will be uploaded.
success = ftp.ChangeRemoteDir("junk")
If (success <> true) Then
MsgBox(ftp.LastErrorText)
Exit Sub
End If
' Upload a file.
Dim localFilename As String
localFilename = file_name
Dim remoteFilename As String
remoteFilename = file_name
if i =0 then
success = ftp.PutFile(localFilename,remoteFilename)
If (success <> true) Then
MsgBox(ftp.LastErrorText)
Exit Sub
End If
else
success = ftp.GetFile(remoteFilename,localFilename)
If (success <> true) Then
MsgBox(ftp.LastErrorText)
Exit Sub
End If
end if
ftp.Disconnect()
end functionوهي كسابقتها غذا كان i بــ 1 معناها تحميل و 0 معناها رفع
وهنالك الكثير و الكثير في هذه المكتبة الرائعة وانا تحت الامر في اي شيء في المكتبة غير مفهوم
رابط تحميل المكتبة وملف قراءة مسلسل القرص الصلب في المرفقات
كلمة سر فك الضغط
waqwaq