PDA

View Full Version : سوال: روش های قرار دادن کاراکتر Check Sum در رشته ارسالی



khazaie01
دوشنبه 14 تیر 1389, 20:24 عصر
سلام دوستان
امیدوارم جای مناسبی را برای این سوال انتخاب کرده باشم !
یک سخت افزار شرکتی خاص دارم که به همراه خودش یک نرم افزار داره ...
هیچ اطلاعی از نحوه تبادل اطلاعات بین نرم افزار و سخت افزار مربوطه ندارم ...

خوب ، من میخوام یک سخت افزار جدید درست کنم تا با نرم افزار اون دستگاه بتونه کار کنه !
یعنی از نرم افزار اون برای دستگاه خودم استفاده کنم ، چون به سورس برنامه و سورس سخت افزار شرکت دسترسی ندارم ، به ناچار با استفاده از مهندسی معکوس ، نحوه تبادل اطلاعات بین این دو را در میارم تا سخت افزار خودم را به شکلی طراحی کنم که اون نرم افزار شرکتی بدون هیچ مشکلی با سخت افزار من کار کنه ...

همه چی خوب پیش می رفت تا اینکه به یک مشکل برخوردم :

دستگاه یک رشته داده را برای کامپیوتر ارسال می کنه که کاراکتر آخر اون فکر کنم یه جورایی Check Sum است ، از اونجایی که من باید بتونم اطلاعاتی که این سخت افزار ارسال می کنه را با سخت افزار خودم ارسال کنم ، باید الگوریتم این کاراکتر آخر را پیدا کنم .

سوال من این که آیا الگوریتم های خاص و استانداردی برای اینگونه کاراکتر ها است یا نه ؟

این چند رشته را ببینید متوجه منظور من می شوید :

21135
21171
2119?
2120>
کاراکترهای آخر هر رشته ، همون کاراکتری هست که می گم و اگر این یک کاراکتر را تغییر بدم دیگه نرم افزار نمیتونه اطلاعات را بخونه ...

این کاراکتر آخر به کاراکترهای دیگه رشته بستگی داره و یک رابطه ای بین این کاراکتر و کاراکترهای قبل از اون هست اما نمیدونم چه رابطه ای !

من منتظر راهنمایی های شما دوستان عزیز هستم :لبخندساده:

ممنوووووووووون

Mehran.GH
سه شنبه 15 تیر 1389, 00:10 صبح
سوال : آیا الگوریتم های خاص و استانداردی برای اینگونه کاراکتر ها است یا نه ؟

جواب : بله

الگوریتم های خاص برای تشخیص معتبر بودن سری اعداد هست اما این الگوریتم ها لزوما استاندارد نیستند و می توان برای هر کاربردی تغییر کوچکی در آن اعمال کرد.

مثال جهت آشنایی با موضوع:

یک الگوریتم تقریبا ساده الگوریتم Luhn است که استفاده می شود با این نحو که مثلا یک عدد داریم 2113x که از سمت چپ شروع می کنیم
عدد اول + دو برابر عدد دوم + عدد سوم + دوبرابر عدد چهارم را محاسبه می کنیم:

2+(1*2)+1+(3*2) =11

x باید طوری انتخاب شود که حاصل 11 + x برابر یک مضربی از 10 باشد که در اینجا x برابر 9 مناسب است که حاصل می شود 20 و مضربی از 10 است و نهایتا عددی که دستگاه می فرستد 21139

در سمت دیگر این عدد را که دریافت کرد به همان ترتیب عدد اول + دو برابر عدد دوم + عدد سوم + دوبرابر عدد چهارم + عدد پنجم را حساب می کند که مضربی از 10 باشد که در این مثال اگر 20 بشود در سمت گیرنده می گوید عدد دریافتی معتبر است.


دقت کن در اینجا هدف رمز نگاری نبوده بلکه فقط روشی جهت " کنترل صحت اعداد انتقالی" به کار رفته حالا تصور کن این رابطه ساده به نحوی به جای مضرب 10 مضربی از عدد دیگری باشد و یا ترتیب ضرب شدن اعداد در 2 وجمع کردن آنها طور دیگری باشد در این حالت دیگر الگوریتم استاندار نیست اما برای آن کاربرد خاص جوابگو است!

یک نکته درباره این نوع الگوریتم ها و دستگاهی که داری کار می کنی این است که بسته به زمینه کاری و یا حتی سالی که آن محصول اصلی تولید شده شاید بتوان بهتر حدس زد که ممکن است چه الگوریتمی به کار رفته باشد (بعضی روشها به مرور زمان تکمیل شده و اگر دستگاه قدیمی باشد دیگر لزومی ندارد دنبال الگوریتمهای جدید بگردی)

مثلا اگوریتم هایی که برای انتقال داده در ادوات کنترل آتش هواپیمای F14 ممکن است استفاده شده باشد بیشتر رمز نگاری مهم بوده است تا فقط بحث کنترل صحت داده ها , الگوریتم های که مثلا در زمینه مخابرات (الگوریتم Verhoeff ) برای انتقال داده استفاده می شود متفاوت است از مثلا دستگاه های تشخیص اثر انگشت و یا روشهایی که در کارتهای اعتباری در بانکها به کار می رود و یا روشهایی که برای رمز نگاری در محیط اینترنت cryptographic hash استفاده می شود هر کدام داستان تقریبا مستقل خود را دارد

به هر حال چون ننوشتی چه زمینه کاری است بر اساس حدس بیشتر از این نمی توان اظهار نظر کرد فقط پیشنهاد می کنم دنبال الگوریتم های error detection and correction مربوط به همان زمینه کاری خودت در نت بگردی و اگر هم دستگاه خاص ؟؟؟ است که هدفشان رمز گذاری بوده که شاید نوشتن یک نرم افزار جدید کمتر وقت ببرد!

khazaie01
سه شنبه 15 تیر 1389, 08:34 صبح
ممنوووووووووووووووووووووو وووووووووووووون
نمیدونم چجوری از شما تشکر کنم بابت وقتی که برای پاسخ دادن به سوال من گذاشتید. واقعا ممنوووووووووون.

دستگاه و نرم افزار مربوط به 6 تا 10 سال پیش است ، به نظر خودم این کاراکتر برای رمز گذاری نیست چون نرم افزار و سخت افزار مربوطه کار خاصی انجام نمی دهند .

درواقع هدف اصلی تولید یک سخت افزار و نرم افزار جدید است ، اما چون وقت کم دارم و فعلا فقط میخوام کار راه بیفته ، سخت افزار جدید را درست کردم ولی میخوام از نرم افزار اون شرکت استفاده کنم و بعد از راه انداختن سخت افزار با نرم افزار اون شرکت ، نوشتن نرم افزار جدید را با وقت و حوصله بیشتر شروع می کنم.

فقط چون تو این مدت با این نرم افزار باید کار کنم ، مجبورم نحوه ارتباط با دستگاه را پیدا کنم.

اطلاعاتی که در حال حاضر دیدید مربوط به ساعت است ،مثلا 21:13 . پس نباید اون کاراکتر آخر برای رمزگذاری باشه !!

در 4 تا از رشته ها ، کاراکترهای آخر همه رشته ها با هم برابر بودند با اینکه دو کاراکتر قبل آن با هم تفاوت داشتن ،نکته ای که متوجه شدم این بود که اگر از اون دو کاراکتر ماقبل کاراکتر آخر در هر رشته، Xor بگیرم یک عدد خاص بدست می آید (در اون حالت عدد 6) و احتمالا به خاطر این موضوع کاراکتر آخر هر 4 رشته با هم برابر بود با این که دو کاراکتر ماقبل آخر 4 رشته با هم تفاوت داشتن.

بازم ممنوووووووووووووووووووووو ووووووون :لبخندساده:

khazaie01
سه شنبه 15 تیر 1389, 13:49 عصر
مشکل حل شد ، Xor بود تمامی داده ها را با هم Xor کرده بود...
ممنووووووون از راهنمایی های دوست عزیز....