نقل قول نوشته شده توسط freeman99 مشاهده تاپیک
تاجاییکه من الان تحقیق کردم، crc عمدتا برای error detection هست و نه error correction.
البته ظاهرا به شکلی و تاحدودی میشه ازش برای error correction هم استفاده کرد، ولی کاراییش در این امر کاملا محدوده. یعنی اینطور بگم که اینطوری نیست که شما یه crc بذارید و بتونید باهاش هر خطایی رو رفع کنید. مثلا یه فایل که چند کیلوبایت هست اونوقت با یک crc که چند بایت بیشتر نیست چه تعدادی از خطاها رو میشه باهاش اصلاح کرد؟!
اگر دنبال قابلیت اصلاح خطای درست و حسابی هستید باید دنبال سیستمهایی گشت که مخصوصا برای همین طراحی شدن، یا این قابلیت هم یکی از اهدافشون بوده. طبیعتا اینطور سیستمها افزونگی متناسب با حجم دیتا رو هم دارن. مثلا فرض کنید 5% حجم خود دیتا رو دارن، نه اینکه یه حجم ثابت و ناچیز باشه. در اون حجم ثابت و ناچیز در مقابل دیتا، طبیعتا نمیشه اطلاعات کافی برای اصلاح خطاهایی که از چند بیت بیشتر هستن رو بدست آورد. معجزه که نیست! اگر میشد دیگه لازم نبود کل یک فایل ذخیره یا منتقل بشه، بجاش یک کد crc رو استفاده میکردن و بقیهء فایل رو از روی همون بدست میاوردن خب! اونوقت میشد اند فشرده سازی!! خطاهایی که اینطور سیستمها میتونن اصلاح کنن خیلی محدوده و بنظرم با حجم دیتا هم رابطهء معکوس داره. یعنی وقتی حجم دیتا خیلی کم باشه، اونوقت میتونن عملا برای چنین کاربردی هم مفید باشن، ولی وقت حجم دیتا زیاد باشه و خطاهای ممکن از چند بیت خیلی بیشتر باشن دیگه کاری ازشون برنمیاد (مثل هش فقط میتونن رخداد خطا رو تشخیص بدن، و نهایت شاید بتونن یه محدوده و شکلی رو برای خطای رخ داده مشخص کنن؛ یعنی مثلا بگه خطا توی محدوده بایت 120 تا 400 بوده، و شاید درمورد تعداد بیت های دچار خطا شده هم بتونه چیزی بگه یا تخمینی بزنه و چندین حالات احتمالی و این حرفها).

چند مطلب در این مورد که نگاهی انداختم:
http://stackoverflow.com/questions/3...ction-with-crc
http://stackoverflow.com/questions/3...587616#8587616
http://stackoverflow.com/questions/9...ection-library
یعنی چی که تا حدودی برای اصلاح خطا استفاده میشه؟! کلا این همه نسخه مختلف برای crc تا الان روش کار شده که روی اصلاح خطا بیشتر بتونن مانور بدن وگرنه که همون پریتی قابل استفاده بود دیگه! چند بایت هم قرار نیست کل فایل رو اصلاح کنه. آخه کدوم روش انتقال بلوک های اتقالش اندازه کل فایل هست؟! بسته به نسخه ی CRC که استفاده میکنید باید یه اندازه بلوکی رو در نظر بگیرید و تو انتهای اون یه بسته crc قرار بدید و این بسته مسئول بررسی همون بلوک هست نه کل فایل! این جوری اصلا نیازی به معجزه هم نیست.
خلاصه که crc تو لایه انتقال تعریف میشه و عمدتا توسط خود سخت افزار بررسی میشه ولی هش تو خود برنامه ها!
جدا از این حرف ها بازهم فکر نمکنم که MD5 اونقدر ها هم نا امن باشه! مثلا اگه از این الگوریتم توی Hmac استفاده کنیم امنیت بالاتری ایجاد میشه چون پیدا کردن حالتی که یه سری داده با یه پسورد خاص هش تکراری تولید کنه خیلی کمتر هست. خود من الگوریتم sha رو بیشتر دوست دارم ولی برای خیلی کاربرد ها هنوز هم MD5 کارا هست(به خاطر اندازه کوچکتر و سرعت بالاترش)