میخواهم یک داستان جالب تعریف کنم که برای حل مشکلم از MD5 در یک کاربرد غیر معمول استفاده کردم.
اولین بار که یک برنامه ساده را روی STM32 پروگرام کردم، طبق توضیحات یک سایت بود، قدم به قدم پیش رفتم و بدون دردسر میکرو پروگرام شد، بدون اینکه نیاز باشه جامپر Boot0 را روی حالت پروگرام بگذارم چندین بار برنامه رو تغییر دادم و پروگرام کردم.بعد از اینکه وارد دنیای برنامه نویسی Fom Scratch شدم، متوجه شدم برای پروگرام کردن برنامه باید جامپر Boot0 را در حالت پروگرام قرار بدهم و امکان دیباگ را هم از دست داده ام. دوباره به همون آموزش برگشتم و متوجه شدم تنظیماتی برروی ۲ تا از پایه های پورت A ست میشه که باعث فعال شدن مد دیباگ و پروگرام در مد Serial Wire میشه.
برای فهمیدن اینکه چه تغییراتی روی کد انجام شده از STM32CubeIDE استفاده کردم.
در مرحله اول یک پروژه جدید ساختم و در ویزارد تنظیمات از قسمت System core و زبانه SYS مد دیباگ را Serial Wire انتخاب کردم. بعد از Save کردن فایلها ساخته شدند و از فولدر پروژه تمامی فایلها را برداشتم. دوباره به ویزارد برگشتم و اینبار مد دیباگ را خاموش کردم و با سیو کردن پروژه فایلها تغییر کردند.
در این مرحله دو دسته فایل در فولدرهای مختلف در دسترسم بودند که باید اختلاف اونها را کشف میکردم. بعضی فایلها بسیار حجیم بودند و عملا چک کردن چشمی کدها غیر ممکن بود.
ابتدا به نظرم رسید از پایتون برای این کار استفاده کنم ولی کد مناسبی پیدا نکردم و نوشتن کد جدید برام زمانبر بود. اینجا بود که به ذهنم رسید از MD5 استفاده کنم.
MD5 چیه؟
MD5 یک تابع درهم ساز هست که یک ورودی میگیرد و یک خروجی ۱۲۸ بیتی تحویل میدهد. با کوچکترین تغییر در ورودی خروجی تحویلی متفاوت خواهد شد. در صورتیکه دو ورودی یکسان به تابع داده شود، خروجی ها یکسان میشوند. حتی اگر یک Space در ورودی تغییر کنه خروجی ها بکل تغییر خواهند کرد.
من از فایلهای داخل فولدرهای پروژه MD5 گرفتم و MD5 فایلهای هم نام پروژه ها را مقایسه کردم. با مقایسه مشخص شد که فقط ۲ تا از فایلها تغییر کرده اند که خوشبختانه بسیار کوچک بودند و با بررسی چشمی متوجه تفاوتهای فایلها شدم. و مسئله حل شد.
برای MD5 گرفتن از فایلهای یک دایرکتوری در ویندوز از دستور زیر در Power Shell ویندوز استفاده کردم:
Get-FileHash -Algorithm MD5 -Path (Get-ChildItem "\\path\to\files\*.*" -Recurse)
بنظرم این یکی از جالبترین کاربردهای تابع MD5 بود که میشه برای مقایسه دو فایل و فهمیدن تغییرات فایلها ازش استفاده کرد.
هیچ نظری موجود نیست:
ارسال یک نظر