سلام من یک سوال دارم چطور میتوانم کاری کنم که افرادی که رمز دارند وارد چت روم بشوند در انجمن هم گشتم و فقط یک سورس پیدا کردم که کاربرد زیادی برایم نداشت ممنون میشم راهنماییم کنید.با تشکر
بزودی بازی من
گروه خصوصی در چت روم
|
سلام من یک سوال دارم چطور میتوانم کاری کنم که افرادی که رمز دارند وارد چت روم بشوند در انجمن هم گشتم و فقط یک سورس پیدا کردم که کاربرد زیادی برایم نداشت ممنون میشم راهنماییم کنید.با تشکر
بزودی بازی من
1399/10/16، 02:54 صبح
(1399/10/15، 11:41 عصر)kiarashb نوشته است: سلام من یک سوال دارم چطور میتوانم کاری کنم که افرادی که رمز دارند وارد چت روم بشوند در انجمن هم گشتم و فقط یک سورس پیدا کردم که کاربرد زیادی برایم نداشت ممنون میشم راهنماییم کنید.با تشکرسلام؛ اگر من جای شما بودم برای پیاده سازی این مسئله از الگوریتم Shamir's Secret Sharing ایده میگرفتم. با استفاده از ایـن الگوریتم شما قادر هستین برای تعداد a کاربر به طور اختصاصی برای هر کدوم یک کلید منحصر به فرد تعیین کنین. در ضمن میتونین تعیین کنین که در صورت حضور یه تعداد مشخصی از کاربرها امکان ورود به چت روم وجود داشته باشه. از بررسی این ویژگی الگوریتم به خاطر اینکه شما میخواین هر کاربری بدون نیاز به حضور دیگران به چت روم وارد بشه صرف نظر کردم. این الگوریتم مبتنی بر توابع درجه دوم (سهمی ها) و یا توابع خطی هست. ما در ادامه از توابع خطی برای کـار با الگوریتم استفاده می کنیم. اما چطور این الگوریتم رو باید در پروژه تون به کار ببندین؟ قبل از هر چیز باید یک مقدار عددی تصادفی (رندوم) به نام S بین تمامی کاربران توافق بشه. میتونین این کار رو با ایجاد یک روم (اتاق) مخصوص در شیء مولتی پلیر کانستراکت انجام بدین. به طوری که یک کاربر (هاست یا پیر) مقدار S رو تعیین میکنه و برای سایرین Broadcast میکنه. به این شکل سایر کاربرها هم از مقدار S باخبر میشن. در ضمن تمامی کاربرها باید از طریق شیء لوکال استورج و یا وب استورج اقدام به ذحیره سازی مقدار عددی S کنن چـرا که بعدها لازمشون میشه! حالا همون کاربری که مقدار S رو ایجاد کرده و برای بقیه Broadcast کـرده زحمت ساخت کلیدها (رمزهای عبور) سایر رفقا رو هم میکشه و در پایان برای هر کس کلید منحصر به فردش رو ارسال میکنه. بعد از اینکه مقدار S رو که یک عدد هست مشخص کردیم، باید یه نگاهی به شرایط بندازیم. یعنی ببینیم چند کاربر داریم. تعداد کل کاربرها رو از اینجا به بعد با n و تعداد کلیدهایی که باید بسازیم رو با k مشخص میکنیم. باید مقدار k رو برابر با (تعداد کل کاربران × 2) در نظر بگیریم. از اینجای کار به بعد وارد فاز محاسبات الگوریتم میشیم. شرح الگوریتم: کاربران مـا بر سر مقدار S = 1742 توافق کردن. با فرض اینکه در کل 2 کاربر داشته باشیم باید مقادیر n و k رو به ترتیب 2 و 4 (2×2) تصور کنیم. حالا باید به سراغ تابع f(x) = S + bx بریم. متغیر b در این تابع میتونه یک عدد رندوم باشه که ما به طور مثال عدد 64 رو انتخاب میکنیم. متغیر S رو هم که راجع بهش قبلتر بحث کردیم. پس با این تفاسیر باید تابع رو به شکل زیر بازنویسی کنیم: کد: f(x) = 1742 + 64x ![]() خُب در نهایت ما به چهارتا مختصات (زوج مرتب) رسیدیم که هر دوتا مختصات (زوج مرتب) میتونن کلید (رمز) یکی از دو کـاربرها باشن. مثلاً برای کاربر دوم میتونیم رمز 3/1934-4/1998 رو متصور بشیم. اما حواسمون باشه که خط تیره دو مختصات (زوج مرتب) رو از هم تفکیک میکنه. میتونین در کانستراکت این مسائل رو با اکسپرشن های tokenat و یا tokencount و یا با عبارات با قاعده (Regex) مدیریت کنین. اما حکمت اینکه ما دو مختصات (زوج مرتب) برای هر کاربر به عنوان رمز (کلید) در نظر میگیریم چیه؟ خُب خیلی ساده است! اصولاً زمانی ما میتونیم یک خط رو رسم کنیم که دست کم دو نقطه اش رو داشته باشیم. پس مجبوریم برای هر کاربر دو زوج مرتب (مختصات) رو به عنوان رمز (کلید) در نظر بگیریم. خُب تا به اینجای کار ما به خوبی و خوشی رمز (کلید) هر یک از دو کاربر رو ساختیم و تحویلشون میدیم. حالا فرض کنیم یه کاربری میخواد با رمزش وارد چت روم بشه. چطور مطمئن بشیم رمزی که وارد میکنه با مقدار S ذخیره شده توسط لوکال استورج یا وب استورج مطابقت داره؟ برای حصول اطمینان از درستی رمز (کلید) وارده توسط کاربر باید از فرمول های زیر استفاده کنیم تا در نهایت بتونیم تابع خطی که در مرحله ایجاد کلیدها ساختیم رو مجدداً بسازیم و مقدار S رو با مقداری که ذخیره کردیم تطابق بدیم. ![]() فرض کنیم کاربر رمز عبور 1/1806-2/1870 رو وارد کرده باشه. برای حصول اطمینان از صحت رمز عبور محاسبات رو به شکل زیر انجام میدیم: ![]() موفق باشین.
1399/10/16، 10:16 صبح
ممنون اما اگر بخواهیم برای همه کاربران یک رمز تعین کنیم چیکار باید بکنیم؟ببخشید که زحمتتون دادم
بزودی بازی من
1399/10/16، 03:33 عصر
(1399/10/16، 10:16 صبح)kiarashb نوشته است: ممنون اما اگر بخواهیم برای همه کاربران یک رمز تعین کنیم چیکار باید بکنیم؟ببخشید که زحمتتون دادمسلام؛ اگـر به ارسال اولم دقت میکردین، گفته بودم که باید یک روم (اتاق) مخصوص تبادل مقدار S و مقدار کلید (رمز) بین کاربران بسازین. به عبارت دیگه:
مثلاً فرض میکنیم دو زوج مرتب رو در اختیار داریم. حالا برای ساخت رمز (کلید) کـاربر به شکل زیر عمل میکنم. به خاطر داشته باشین در ادامه منظور از عملگر [+] جمع ریاضی نیست و صرفاً معنی الحاق ارقام به هم دیگه رو میده. در ضمن باید هر یک از عرض ها یا طول های زوج مرتب هایی که داریم رو به باینری تبدیل کنیم. ![]() در واقع ما از S برای ایجاد تمایز بین طول ها و عرض های زوج مرتب هایی که داریم استفاده می کنیم. حالا وقتشه عدد باینری رو با توجه به اینکه دو زوج مرتب (1870 و 2) و (1806 و 1) رو در اختیار داریم بسازیم. ![]() حـالا اگر مقدار باینری به دست اومده رو به دسیمال (ده دهی) برگردونیم، حاصل عدد 266759623358707534 خواهد بود. ما این عدد رو به عنوان رمز عبور به کاربر ارائه میکنیم. به طور کلی طول (تعداد ارقام) رمز عبور هـر کـاربر رو میتونیم از طریق فرمول زیر به دست بیاریم: ![]() در فرمول بالا نماد ( ⌊ ⌋ ) به معنای جزء صحیح (floor) هست. اگر بخوایم این فرمول رو در قالب یک اکسپرشن در کانستراکت بنویسیم باید به شکل زیر عمل کنیم (فرض من بر این مبنا بوده که 5 متغیر عددی x0، y0، x1 و y1 و s از نوع گلوبال در پروژه وجود داره): کد: (3*(floor((log10(s)/log10(2)))+1))+floor((log10(x0)/log10(2)))+floor((log10(y0)/log10(2)))+floor((log10(x1)/log10(2)))+floor((log10(y1)/log10(2)))+4 ![]() حالا اگر همین تابع رو برای شرایط فعلی اعمال کنم می بینم که دو زوج مرتب به دست میان. ![]() حالا باید هر یک از طول ها و عرض ها رو از فُرم باینری به فُرم ده دهی (دسیمال) برگردونم تا بتونم محاسبات اعتبارسنجی رو انجام بدم. در نـهـایـت یا میتونی لقمه رو مثل من اینطوری چند دور بچرخونی و بعد وارد دهان کنی یا هم از هر ابتکار دیگه ای که به ذهن خودت میرسه استفاده کنی! در ضمن میتونی سورس تابع split_binary رو از اینجا دریافت کنی. اگـر احـیـانـاً منظورت این بوده که همه کاربران از یک رمز یکسان برای ورود به چت روم استفاده کنن (که خُب خیلی جالب نیست از نظر امنیتی!) که نیاز به این همه بگیر و ببند نیست! فقط کافیه یک روم (اتاق) بسازی، یکی هاست یا پیر یه مقدار رندوم رو انتخاب کنه، برای بقیه Broadcast کنه و بقیه هم به صورت دائمی با لوکال استورج یا وب استورج ذخیره اش کنن. بعد هم هر زمان کاربر رمز عبور رو وارد کرد با مقدار ذخیره شده تطابقش میدی. بـه هـر حـال من سعی کردم پاسخ کاملی بنویسم تا منظورت هر چی که بوده متوجه بشی. موفق باشـی. |
موضوعهای مشابه… | |||||
موضوع | نویسنده | پاسخ | بازدید | آخرین ارسال | |
![]() |
پرداخت درون برنامه مایکت کوردوا | ya mahdi | 0 | 229 |
1404/1/17، 05:43 عصر آخرین ارسال: ya mahdi |
نحوه خروجی اندروید کوردوا | ya mahdi | 0 | 176 |
1404/1/11، 04:06 عصر آخرین ارسال: ya mahdi |
|
![]() |
حل شده مقادير لازم در environment variable | ᔕinaᗪehghani | 24 | 11,594 |
1403/10/23، 12:10 صبح آخرین ارسال: Tggi |
تپسل .....فروشگاه | Hamidreza | 3 | 1,932 |
1403/10/22، 11:57 عصر آخرین ارسال: Tggi |
|
خروجی اندروید با Intel xdk | ya mahdi | 0 | 130 |
1403/8/25، 02:08 عصر آخرین ارسال: ya mahdi |