تجربه‌های پراکنده‌ی یک مسعود
در صورت ناخوانا بودن نوشته‌ها، از مرورگر دیگری استفاده کنید.

1314.13 5.00
تجربه‌های پراکنده‌ی یک مسعود در عالم ریاضیات، الگوریتم و برنامه‌نویسی تجربه‌های پراکنده‌ی یک مسعود تجربه‌های پراکنده‌ی یک مسعود تجربه‌های پراکنده‌ی یک مسعود

کمی در مورد رمزنگاری

یک نوشته‌ی قدیمی از «ریاضیکده» در مورد رمزنگاری

«

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

    وقتی شروع نامه و آخرش رو خوندم حس کردم هر حرف فارسی با یه نشان از زبان دیگه جایگزین شده. اولین کلمه‌ی نامه "ÓáÇã" بود که حدس زدم باید "سلام" باشه. و همینطور از خداحافظی آخر نامه هم چند حرف رو بیرون کشیدم. بعدش کلماتی وجود داشتن که فقط یه حرفشون نامشخص بود و می‌شد حدس زد اون یه حرف چیه؟ با همین حدس زدن‌ها پیش رفتم و حدود نیم ساعت بعد متن فارسی کامل رو در کمال افتخار به دست آوردم!

    استفاده از رمزنگاری در متون مهم و حساس قدمت زیادی داره. در یونان قدیم به روش خیلی جالبی متن نامه رو به رمز می‌نوشتن. سزار روم هم روشی برای رمزنگاری استفاده می‌کرده که امروزه به روش رمزنگاری سزار مشهور شده. به این ترتیب که به جای هر حرف از متن اصلی، سومین حرف بعد از این حرف در الفبای زبانشون رو جایگزین می‌کرده. مثلا در زبان انگلیسی به جای A از D و به جای Y از B استفاده می‌شده. وقتی هم که قرار بوده نامه خونده بشه عکس این عمل رو انجام می‌دادن.

ادامه ...
[بازگشت به فهرست]

قبلا پستی داشتم در مورد اینکه تامین امنیت فرآیند ساده‌ای نیست و صرف خوب بودن الگوریتم رمزنگاری و مسائلی از این دست نمی‌شه از امنیت برنامه یا سیستم مطمئن بود. در مورد امنیت انتقال اطلاعات هم بحث شد که خیلی مهم‌ه و یکی از قسمتاش این‌ه که احراز هویت انجام شه و مطمئن باشیم با نفر یا سیستم مورد نظر خودمون در ارتباطیم.

    این روزا خبری منتشر شد در مورد هک شدن تلگرام که ظاهرا باعث لو رفتن شماره تلفن‌ها و احتمالا پیام‌های چند میلیون کاربر ایرانی شده. کاری به صحت و سقم این خبر و میزان اطلاعات لو رفته ندارم. اما در کل این نوع نفوذ رو از دو منظر می‌شه بررسی کرد. اول، نفوذپذیری احتمالی سیستم مخابراتی که به نفوذگر این فرصت رو بده تا پیام‌های ارسال شده از تلگرام برای کاربر رو بخونه و از این طریق بتونه خودش رو جای کاربر اصلی جا بزنه؛ و دوم، سهل‌انگاری یا بی‌اطلاعی کاربر در مورد تنظیمات امنیتی برنامه.

ادامه ...
[بازگشت به فهرست]

نکته‌ای در استفاده از map

نکته‌ای در مورد استفاده از ساختمان داده‌ی map با مثالی به زبان برنامه‌نویسی ++C

ساختمان داده‌ی map (یا dictionary) از ابزارهای مهم و کاربردی هر زبان برنامه‌نویسی‌ه که برای برقراری نگاشت بین هر نوع کلید و مقدار متناظر استفاده می‌شه. آرایه‌های معمولی یه عدد صحیح رو به عنوان کلید به یه مقدار از هر نوع کلاس یا نوع داده نگاشت می‌کنن. اما وقتی از map استفاده می‌کنیم، این امکان بهمون داده می‌شه که از اشیاء کلاس‌ها و انواع داده‌های پیش‌فرض هر زبان برنامه‌نویسی به عنوان کلید استفاده کنیم. پس مشخصه که پیاده‌سازی خیلی از عملیات‌ها رو ساده‌تر می‌کنه و کمک بزرگی به حساب می‌یاد.

    با توجه به نوع نگاشت، طبیعتا محاسبات map برای ذخیره کردن و بازیابی اطلاعات پیچیده‌تر از آرایه‌‌های معمولی‌ه. برای مثال برنامه‌ای به زبان ++C رو در نظر بگیرید که مقدار هفتصد هزار جمله‌ی اول دنباله‌ی فیبوناچی رو به روش برنامه‌نویسی پویا داخل یه آرایه و همینطور یه map ذخیره می‌کنه و مدت زمان اجرای این فرآیندها رو به عنوان خروجی چاپ می‌کنه:

 1  int main(){
 2      const int size = 700000;
 3      int a[size];
 4      map<int, int> b;
 5      clock_t tStart;
 6      double cps = CLOCKS_PER_SEC;
 7      a[0] = b[0] = 0;
 8      a[1] = b[1] = 1;
 9      tStart = clock();
10      for(int i = 2 ; i < size ; i++)
11          a[i] = a[i - 1] + a[i - 2];
12      cout << "Time for array: " << (clock() - tStart) / cps << "s" <<  endl;
13      tStart = clock();
14      for(int i = 2 ; i < size ; i++)
15          b[i] = b[i - 1] + b[i - 2];
16      cout << "Time for map: " << (clock() - tStart) / cps << "s" << endl;
17      return 0;
18  }

ادامه ...
[بازگشت به فهرست]