المتابعون للمدونة

الجمعة، 25 يونيو 2021

تطبيع فواصل الأسطر

 تطبيع فواصل الأسطر Normalizing Line Terminator قبل تهويش النص Hashing:

شرحت لكم في الفيديو السابق كيف نستخدم خوارزمية MD5 للحصول على قيمة تقريبية للنص Hash لاستخدامها كبصمة للملف الناتج من مولد الكود، بحيث نقارنها مع البصمة المحفوظة في دالة الاختبار، بدلا من كتابة نص الملف كاملا ومقارنة ناتج مولد الكود به.. هذه مثلا إحدى جمل المقارنة:

Assert.AreEqual(GetHash(result.Output), "66C5600E6E58ABAD535095743307BBA6")

حيث إن result.Output هي النتيجة التي حصلنا عليها من مولد الكود، وقد أرسلناها إلى الدالة GetHash لتطبيق خوارزمية MD5 عليها، ومن ثم نتأكد أن بصمة الملف تساوي 66C5600E6E58ABAD535095743307BBA6.

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

فحينما أرسلت الكود إلى GitHub قام بتحويل نهايات السطور من الرمزين VBCrLf (\r\n في سي شارب) إلى vbLf (\n في سي شارب)، وهذا غير النص الناتج من مولد الكود!.. لا أدري هل حدث هذا التغيير عند رفع ملفات الكود أم عند قيامي بتعديل كود ملف الاختبار يدويا في موقع جيتهاب باستخدام النسخ والإلصاق في صفحة التعديل.. أيا يكن، ولتجنب مثل هذه المشاكل مستقبلا، يجب علينا تطبيع قيم النصوص في مشاريع الاختبار قبل إجراء أي مقارنة، باستدعاء وسيلة الاستبدال التالية:

Replace(vbCrLf, vblf)

وحتى لا أكرر هذا في كل دالة اختبار على النص Result.Output، عدلت قيمة الخاصية  Outputنفسها لتطبيع النص من المنبع. 

تحذير:

خوارزمية MD5 غير آمنة لتهويش كلمات المرور، لكنها مناسبة للحصول على بصمة (قيمة تأكيدية Checksum) للنصوص والملفات للتأكد من عدم حدوث تغيير بها.. ويمكنك استخدام خوارزمية SHA-2 لتهويش كلمات السر.

 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر