چگونه از کامپایلر‌های متن باز در ویندوز استفاده کنیم

8 09 2009

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

gccegg-65کمتر کسی از جامعه‌ی برنامه نویسی اسم gcc رو نشنیده. gcc کامپایلریه که نامش از سر‌کلمه‌های Gnu Compiler Collection گرفته شده و ریچارد استالمن در سال 1985 برای ترجمه‌ی برنامه‌های نوشته شده به زبون c اون شروع به ساخت کرد. (منبع، اطلاعات بیشتر، وب‌سایت پروژه)

برای داشتن قدرت و امکانات gcc لزومی نداره که کاربر، سیستم‌عامل خاصی، به عنوان مثال gnu/linux یا gnu/hurd داشته باشه.
توی این پست نحوه‌ی استفاده از GCC توی ویندوز رو توضیح می‌دم.

قبل از هرچیز به MinGW نیاز داریم. که می‌تونیم از این لینک نسخه‌ی 5.1.4 اون رو دریافت کنید. حجم زیادی هم نداره و در حقیقت یه برنامه برای دانلود بسته‌های مورد نیاز هستش.

  • اون رو اجرا کنید.
  • پنجره‌ی خوشامد گویی رو با کلید Next جواب بدین.
  • اگر روی سیستمی که برنامه رو اجرا کردین می‌خواین برنامه رو نصب کنید که Download and Install رو انتخاب کنید و اگر می‌خواین فقط بسته‌ها رو دانلود کنید، Download only رو انتخاب کنید و کلید Next رو بزنید.
  • با پروانه‌ی استفاده و توزیع مجدد در صورتی که موافقت دارید، با زدن کلید I Agree موافقت کنید.
  • بذارین بسته‌های نسخه‌ی Current نصب شه. پس Next رو کلیک کنید.
  • کامپایلر‌هایی که نیاز دارین رو علامت دار کنید و با Next به صفحه‌ی بعد برین.
  • مکان نصب رو انتخاب کنید و Next رو کلیلک کنید.
  • در انتها هم با زدن کلید Install منتظر دانلود شدن (و احتمالا نصب) بسته‌ها باشید.

خب تا اینجا که فقط نصب برنامه بود که خیلی آسون هم بود. اما یه کد نویس علاوه بر کامپایلر به محیط توسعه (IDE) هم نیاز داره. ما که همه چیز رو به صورت آزاد داشتیم، بد نیست از IDE های آزاد هم استفاده کنیم. برای کار‌های کوچیک Notepad++ برنامه‌ی خوبیه ولی من به Geany عادت کردم و اون رو هم به شما پیشنهاد می‌کنم.

اما یه کار کوچولوی دیگه هم اگر انجام بدیم کارمون خیلی راحت تر می‌شه. من فرض رو بر این می‌ذارم که شما این MinGW رو توی درایو C ویندوز نصب کردین. اگر اینطور نیست توی توضیحات به جای این آدرس، محل نصب نرم‌افزار تو سیستمتون رو بذارین. این توضیحات برای ویندوز XP هستش و برای نسخه‌های دیگه‌ی ویندوز روال مشابهی طی می‌شه.

  • به Control Panel برین.
  • اگر گزینه‌ی Performanceand Maintenance رو می‌بینید (کنترل پانل به صورت Category view هست) رو بزنید.
  • System رو انتخاب کنید و اون رو باز کنید.
  • سربرگ Advanced رو انتخاب کنید.
  • از پایین پنجره کلید Environment Variables رو بزنید.
  • از لیست System variables دنبال Path بگردین و از پایین لیست Edit رو کلیک کنید.
  • متن زیر رو که آدرس پوشه‌ی bin نرم‌افزار MinGW نصب شدست رو به همراه یک سیمی‌کالن به ابتداری متن کادر Variable value اضافه کنید:
    C:\MinGW\bin;
  • تمام پنجره‌های باز رو با زدن کلید Ok ببندین.

خب، از این به بعد می‌تونید بدون تایپ کردن آدرس از g++ و امکانات دیگه استفاده کنید.

اما اگر Geany رو نصب کردین، از همون تو می‌تونید برنامه رو کامپایل کنید (F8) یا فایل اجرایی رو تولید کنید (F9) و یا برنامه رو اجرا کنید (F5). پس کد زیر رو توی اون کپی کنید، با نام hello.cpp سیو کنید و بعد F9 رو از روی صفحه‌کلید بزنید و بعد برای اجرای اون کلید F5 رو بزنید. به همین راحتی!
#include<iostream>
using namespace std;
int main(int argc, char** argv){
    cout << "Hello MinGW!\tHello Geany!\n";
    return 0;
}

خب امیدوارم این پست براتون مفید باشه. بد نیست برنامه‌ی Cygwin رو هم تست کنید!
محیط توسعه‌ی Netbeans هم خیلی آسون و سریع و قدرتمنه. بد نیست اون رو هم تست کنید.
پ‌ن: این پست هم تقدیم به ایشون که بسیار با اراده و مصمم دارن برنامه نویسی رو یاد می‌گیرن.
پ‌ن: یک نمونه‌ی کار بسیار عالی رو هم می‌تونید اینجا ببینید


بروز رسانی

توی نظرات بحث گرمی در گرفت. خیلی‌ها از جمله خود من با فایل w32api-3.13-mingw32-dev.tar.gz مشکل داشتن که ساسان عزیز یه راه حل خیلی خوب پیشنهاد داد. Mirror دانلود رو عوض کنید تا مشکل حل بشه!





Origo IDE ابزاری مناسب برای برنامه نویسی موبایل

8 08 2009
Origo IDE™

Origo IDE

هميشه کد نويسي براي موبايل خيلي پر دردسر تر از کد نويسي معمولي بوده. خب اول نياز بود تا يه زبون برنامه نويسي رو ياد بگيريم و بعد ابزار هاي کد نويسي براي موبايل که البته توي ايران به اين راحتي ها هم در دسترس نيست (به خاطر تحريم) و بعد شرو به کد نويسي و تست کنيم. سختي اين کار باعث شد که من فقط 2 تا برنامه اونم با زبون جاوا براي موبايل بنويسم و از اين کار دست بکشم. اما ديروز با يک IDE آشنا شدم که با اون به راحتي و حتي با دانش خيلي کم برنامه نويسي مي شه براي موبايل برنامه ي کاربردي نوشت. اسم اين محيط توسعه ي نرم افزار هست Origo IDE. بهتره قبل از توضيح بيشتر من، توضيح وبسايت Origo IDE رو ببينيم:

Origo IDE™ delivers exceptional performance on Symbian S60 3rd and 5th edition devices.Developing quality applications for Nokia Smartphones is suddenly faster than ever with Origo IDE™.
Start developing great software for Symbian S60 now and publish it at Nokia Ovi Store in record time.

خب همونطور که مي بينيد با اين محيط توسعه ي نرم افزار مي شه براي گوشي هاي داراي سيستم عامل Symbian سري 60 که محبوب ترين سري توي گوشي هاي موبايل هست، البته نسخه ي 3 (مثل Nokia N73 و Nokia N95) و نسخه ي 5 (مثل Nokia 5800 Xpress Music و Nokia N97 و Samsung i8910 Omnia HD) به راحتي و با کيفيت عالي برنامه ي کاربردي نوشت و حتي اون ها رو به فروش رسوند. اين خيلي عاليه.بد نيست که يه Hello World رو هم به اين زبون ببينيم:

.// program entrypoint
.export main
.  System.run application new MyApplication
.
.// MyApplication is the application launched from entrypoint
.class MyApplication extends Application implements TimerListener
.
.  // from class Application
.  draw to <Canvas deviceCanvas>
.    deviceCanvas.draw string "Hello World" to 0, 0

مي بينيد که کد هاي اين برنامه بيشتر به زبون محاوره اي شباهت داره تا کد يک برنامه اونم براي موبايل! بله! به همين راحتي. البته بايد اعتراف کنم که کد نويسي براي من سخته که به اين شکل کد بنويسم!

تو صفحه ي آموزش اينطور جمله اي به چشم مي خوره:

Origo Programming Language is a multi-paradigm, statically typed programming language. It is powerful but easy to learn and use. Many aspects of Origo are similar to Java but Origo borrows certain aspects also from other programming languages, such as indentation blocks and range style vector manipulation from Python.

خب حق هم داره. خيلي از جنبه هاي جاوا رو توي خودش داره ولي از زبون هاي ديگه مثل Python هم جنبه هايي رو به ارث برده. مثل اين بلاک بندي (که به بيرون زدگي بلاک ها يا دندونه کردن بلاک ها معروفه) رو از Python داره. يعني شما رو مجبور مي کنه که بلاک ها رو مرتب بنويسيد.

اگر مشتاق شديد که برنامه با اين زبون براي گوشي خودتون بنويسيد (مثل من) يا حتي اون رو به فروش برسونيد، آموزشي هم براي شما ترتيب دادن. مي تونيد از منوي Help برنامه Documention رو بياريد يا از اين صفحه توي مرور گرتون ديدن کنيد.

و در نهايت بايد اين ها رو اضافه کنم که اين برنامه براي Microsoft Windows ساخته شده و نسخه اي براي سيستم عامل هاي ديگه هنوز وجود نداره. هنوز به صورت آزمايشي به سر مي بره و نهايي نشده. و البته بزرگ ترين مشکل که براي ما ايراني ها وجود داره اينه که اين برنامه به صورت رايگان نيست. البته مي تونيد نسخه ي آزمايشي اون رو دريافت کنيد و فکر مي کنم بدون محدوديت در امکانات يا محدوديت زماني از اون استفاده کنيد. احتمالا توي اين حالت نمي تونيد برنامه هاي خودتون رو به فروش برسونيد. من فعلا از اين حالت دارم استفاده مي کنم.

من مي خوام براي امتحان هم که شده يک بازي براي گوشي سري 60 نسخه ي 5 خودم بنويسم. اگر تونستم، حتماً به صورت متن باز اون رو توي وبلاگ ارائه مي کنم.

پ ن: براي IDE معادلي بهتر از «محيط توسعه ي نرم افزار» پيدا نکردم. اگر بخوايم کلمه به کلمه «Integrated Development Environment» رو ترجمه کنيد معادل مناسبي به دست نمياد. توي ويکي پديا نوشته «محيط توسعه ي مجتمع» که براي من همچين قابل قبول نيست!
پ ن: اگر سوالي براتون پيش اومد، من در خدمت هستم که اگر بتونم به اين سوال جواب بدم.
پ ن: توی اون مثال ابتدای هر خط من یه نقطه اضافه کردم تا این ورد پرس کد رو به هم نریزه.





قرعه کشی فروشگاه سی تو

28 07 2009
فروشگاه محصولات گنو/لینوکس سی تو

فروشگاه محصولات گنو/لینوکس سی تو

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

sitoir: سلام – شما برنده خرید ۲۵۰۰۰ تومان نرم افزاز فروشگاه لینوکس سی تو شدید. پس از اتمام جشنواره می توانید اقدام به خرید تا این سقف نمایید

بله! من ۲۵۰۰۰ تومن برنده شدم! راستش من همیشه پشتیبان این فروشگاه بودم و البته از خریدارانشون هم محسوب می شم. البته به خاطر هدف زیبایی که دارن به این شدت ازشون پشتیبانی می کنم.

امروز هم این ایمیل رو دریافت کردم:

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

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

برنده توییت پنجم مردادماه چه شخصی بود؟
بنا به قول قبلی در روز پنجم مردادماه قرعه کشی در بین توییت کنندگان سی تو برگزار گردید و شخص با نام کاربری saarblog@ مدیر وبلاگ http://saarblog.wordpress.com برنده 25000 تومان بن خرید نرم افزار از سی تو گردید.
برای توییت کردن فروشگاه جهت آگاهی از جشنواره ها و محصولات جدید از آدرس http://www.twitter.com/sitoir استفاده نمایید.

با تشکر از همراهی شما
مدیریت فروشگاه محصولات گنو/لینوکس سی تو

البته اضافه کنم که این جشنواره ها زمان خوبی برای خریدن یک سری از توزیع هایی که به این راحتی به دست نمیان هستش. در کل، علاوه بر تشکر از این فروشگاه، این رو اضافه کنم که هدف این فروشگاه یقیناً یک هدف مادی نیست، قیمت پایین محصولات گویای این ادعای منه. هدف زیبای توسعه ی آزادی نرم افزار هدفیه که من حدس می زنم باعث ایجاد این فروشگاه شده. این فروشگاه قبل از این هم یک سری اوبونتو برای جشن انتشاری که من توی دانشگاه برگزار کردم به صورت رایگان ارسال کرده.
پس بیایم ما هم با پشتیبانی از این فروشگاه توی فرهنگ سازی نرم افزار آزاد نقشی داشته باشیم و این فروشگاه رو با خرید خودمون حمایت کنیم.

شاید بهتر از این پست جایی برای یک سری پیشنهاد به این فروشگاه نباشه! لاتک فارسی و البته پروژه ی زی پرشن هم یک نرم افزار آزاد فارسی هستش که نیاز به حمایت داره. متاسفانه شاید اسم این رو هم خیلی نشنیدیم. من قبل از این به تیم توسعه ی  پارسیکس هم پیشنهاد گنجوندن این برنامه رو توی توزیع خودشون کردم که متاسفانه استقبالی نشد. خب از سی تو می خوام که پیگیر این نرم افزار و گنجوندنش توی فروشگاه باشه که من قول می دم یکی از اولین کسانی باشم که اون رو می خرم.

پیشنهاد بعدی من هم اینه که روی مخازن محلی بیشتر تکیه کنن. یکی از مشکلات ایرانی ها سرعت پایین اینترنته که باعث شده از جامعه ی متن باز بیشتر از پیش دور باشن. این مخازن محلی می تونه حد اقل مقداری از این کاستی رو جبران کنه.

پیشنهاد سوم هم این که آرم فروشگاه یا لوگوی اون رو توی این تصاویر کوچیک 80 در 15 پیکسلی بذاره تا کسانی که این فروشگاه رو حمایت می کنن اون آرم رو توی صفحه ی خودشون بذارن.

پ ن: راستش چند وقتی بود که می خواستم مجموعه کامل LCD4Linux رو بخرم. پس احتمالا این کار رو با این جایزه خواهم کرد. البته در کنار اون بدم نمیاد سیستم عامل اندروید گوگل به صورت دیسک زنده رو هم تجربه کنم. در کل یه پست هم در مورد خرید های خودم خواهم نوشت!


بعد نوشت

توی این چند وقت که از اینترنت دور بودم گویا مخازن محلی اوبونتو به فروشگاه اضافه شده! اینم لینک!





تغییر تصویر زمینه‌ی صفحه‌ی بوت سیستم

23 07 2009

براي شکستن سکوت «سار» بهانه‌اي بهتر از يه قابليت جالب سيستم‌هاي گنو/لينوکسي پيدا نکردم. اين بار مي‌خوام در مورد Grub که وظيفه‌ي بارگذاري سيستم عامل Ubuntu و البته خيلي از گنو/لينوکسي ديگه رو داره، يک قابليت جالب رو بگم.

Grub Splash Image

Grub Splash Image

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

اولين چيزي‌هايي که بهشون نياز داريم اين‌ها هستن:

  • يک سيستم عامل Ubuntu که البته نصب شده باشه.
  • اينترنت يا DVD اوبونتو. البته براي نصب يک برنامه. می تونید از فروشگاه سی تو یا لینوکس شاپ تهیه کنید.
  • يک تصوير دلخواه که من براي شروع اين تصوير رو انتخاب کردم.
  • برنامه‌ي imagemagick.
  • بعلاوه‌ي يکم صبر و حوصله و تايپ چند تا دستور.

خب اول از همه بايد imagemagick رو نصب کرد. پس يهTerminal باز کنيد و کد زير رو بنويسيد:

sudo apt-get install imagemagick

بعد کد عبور رو تايپ کنيد و منتظر بمونيد تا برنامه دانلود بشه يا از DVD نصب بشه (براي نصب از DVD بايد اون رو به مخازن اضافه کرده باشيد) و نصب بشه.

حالا يه تصوير انتخاب کنيد و اون رو به پوشه‌ي خانگي کپي کنيد يا اين که توي Terminal کد زير رو بنويسيد تا تصويري که من انتخاب کردم Download بشه:

wget http://saarblog.files.wordpress.com/2009/07/boot_image.jpg

ما نياز داريم تا سايز تصوير ۶۴۰×۴۸۰ Pixel باشه. پس با دستور زير اون تصوير رو تغيير سايز مي‌ديم. فرض بر اينه که اسم تصوير boot_image.jpg هستش که اگر اينطور نيست توي کد زير اسم تصوير خودتون رو جايگزين کنيد.

convert -resize 640x480 boot_image.jpg image.jpg

با کد بالا از تصوير boot_image.jpg يک تصوير تغيير اندازه داده شده با نام image.jpg مي‌سازيم. تو اين مرحله نياز داريم تا تصويرمون رو ۱۵ رنگ و به نوع xpm تغيير بديم. براي اين کار کد زير رو استفاده مي‌کنيم:

convert -colors 15 image.jpg image.xpm

و در نهايت بايد تصوير حاصل رو فشرده کنيم:

gzip image.xpm

خب تا اينجا ما يک تصوير فشرده با نام image.xpm.gz خواهيم داشت. اين تصوير رو با کد زير به پوشه‌ي grub منتقل مي‌کنيم. البته بايد مجوز داشته باشيم براي اين کار، به همين دليل sudo رو هم قبل از دستور کپي تايپ کردم.

sudo cp image.xpm.gz /boot/grub/

خب با کد زير از فايل متني حاوي تنظيمات grub يک پشتيبان بسازيد:

sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.backup

و با کد زير فايل رو باز کنيد:

sudo gedit /boot/grub/menu.lst

اگر قبل از اين تصويري به عنوان پس زمينه‌ي صفحه‌ي boot انتخاب نکردين، کد زير رو به فايل اضافه کنيد. براي راحتي کار ابتداي فايل يک خط جديد اضافه کنيد و کد زير رو اونجا کپي کنيد:

splashimage /boot/grub/image.xpm.gz

فايل رو ذخيره کنيد و ببنيد ويرايشگر رو. کار تمومه و مي‌تونيد براي ديدن نتيجه کامپيوتر رو restart کنيد. البته مي‌تونيد از دستور زير هم کمک بگيريد!

sudo reboot

اما خب براي اين که جلوه‌ي بهتري به کارمون بديم مي‌تونيم رنگ خطورط و زمينه‌ي انتخاب (و البته سايه‌ي خطوط) رو هم انتخاب کنيم. براي اين کار ابتدا دو تا رنگ براي اين دو در نظر بگيريد و کد RGB اون دوتا رو بدست بيارين (مي‌تونيد از gimp کمک بگيريد. البته براي اين کار برنامه‌ي gcolor2 هم وجود داره!) اگر از تصوير من استفاده کردين مي‌تونيد از کد رنگ‌هاي من هم استفاده کنيد. اين کد‌ها براي من: E1EAD8 براي زمينه و 512420 براي خط‌ها هستن. با اين حساب اين دو خط رو به فايل تنظيمات اضافه کنيد:

background E1EAD8
foreground 512420

خب. خسته نباشيد. اميد وارم اين راهنمايي هم براتون جالب باشه.

پ‌ن: من براي Ubuntu توضيح دادم ولي خب براي اکثر گنو/لينوکس‌ها که از Grub استفاده مي‌کنن، روال همين هست. اگر به مشکلي برخورد کردين با من تماس بگيريد.

پ‌ن: بعضي از تصاوير وقتي براي اين کار استفاده مي‌شن به درستي نمايش پيدا نمي‌کنن. شايد هم مشکل از کارت گرافيک کامپيوتر من باشه. در هر صورت اگر به مشکل مشابهي برخوردين من رو هم در جريان بذارين.

پ‌ن: چند روز پيش تولدم بود. هرچند روز خوبي براي خودم نبود با اين همه خيلي از دوستان من رو شرمنده‌ي خودشون کردن که نمي‌تونم اسم تک تکشون رو ببرم. با اين همه از همشون تشکر مي‌کنم.

به روز رسانی:

برای Grub 2 هم آی لینوکی یه پست خوب داره. برای این کار می تونید این لینک رو دنبال کنید.





راه اندازی جلوه‌های تصویر کارت‌های گرافیک اینتل در اوبونتو ۹.۰۴

24 05 2009

خب عنوان مطلب یکم طولانیه و البته کامل هم نیست! دقیق تر بگم. می‌خوام بگم که چطور جلوه‌های تصویری رو برای کارت‌های گرافیکی Intel سری 965 رو فعال کرد. این کارت گرافیک روی لپ‌تاپ من نصبه و احتمالا روی خیلی دیگه از لپ‌تاپ‌های دیگه از این مدل کارت گرافیک استفاده شده.

توضیح این که این مدل از کارت‌های گرافیک در اوبونتو Jaunty Jackalope یا همین ۹.۰۴ توی لیست سیاه جلوه‌های ویژه قرار گرفته البته به دلیل وجود یک باگ. البته با رفع شدن این مشکل خود به خود از لیست سیاه حذف می‌شه ولی اگه شما هم مثل من نمی‌تونید صبر کنید، بهتره به صورت دستی اون رو از لیست سیاه خارج کنید. کار سختی نیست:


mkdir -p ~/.config/compiz/ && echo SKIP_CHECKS=yes >> ~/.config/compiz/compiz-manager

دستورات بالا رو توی محیط متنی (Alt+F2 و بعد gnome-terminal البته در اوبونتو! و Alt+F و بعد konsole در کوبونتو) اجرا کنید. به این ترتیب چک کردن مدل کارت گرافیک لغو می‌شه و شما می‌تونید جلوه‌ها رو اجرا کنید.

منبع: اینجا





اینترنت دانشگاهی

21 05 2009

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





مسئله چیست؟

10 05 2009

بنا به تعريف Pounds در سال 1969، يك مسئله تفاوت ميان وضعيت موجود و وضيعت مطلوب مي‌باشد.





الگوی امنیتی به کار گرفته شده در چیچک

21 04 2009

چیچک یک مشکل امنیتی داشت و اون این بود که گذرواژه‌‌های وب‌سایت‌های مختلف رو به صورت ناامن ذخیره می‌کرد. خب برای رفع این ضعف من مدتی روی الگوریتم‌های مختلف کار کردم تا در نهایت این مشکل رو حل کردم.

من از الگوریتم AES استفاده کردم. این توضیح رو بگم که AES یه الگوریتم رمزنگاری متقارنه به این معنی که داده‌ها به یک کلید رمزنگاری می‌شه و با همون کلید، رمز گشایی.

خب مشکل استفاده از این الگوریتم این بود که نمی‌شد به حافظه‌ی کاربر اعتماد کرد و کلید ۱۶ بایتی این الگوریتم رو به حافظه‌ی کاربر سپرد. خب راه حل بهتری (و البته نه غیر قابل نفوذ، مثل بقه‌ی الگوریتم‌های ایمن) که من استفاده کردم این بود که برای هر کامپایل از کاربر بخوام که کلید ذخیره شده توی سورس کد رو تغییر بده و برنامه رو کامپایل کنه. من هم برای نسخه‌ی باینری یک کلید رو وارد می‌کنم و اون رو پیش خودم نگه می‌دارم. خب، به نظر راه حل ایمنی بود، نه؟

اما جاوا نویس‌ها می‌تونن برای رمز نگاری کردن یک جریان داده‌ی ورودی به نام inputStream اینطور عمل کنن:

java.io.InputStream inputStream = ...
java.security.Key key = ...
javax.crypto.Cipher c =
javax.crypto.Cipher.getInstance("AES");
cipher.init(javax.crypto.Cipher.DECRYPT_MODE, key);
javax.crypto.CipherInputStream decryptingInputStream =
new javax.crypto.CipherInputStream(inputStream, cipher);

و برای رمز نگاری جریان داده‌ی خروجی به نام outputStram اینطور:

java.io.OutputStream outputStream = ...
java.security.Key key = ...
javax.crypto.Cipher c =
javax.crypto.Cipher.getInstance("AES");
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key);
javax.crypto.CipherOutputStream encryptingOutputStream =
new javax.crypto.CipherOutputStream(outputStream, cipher);

و البته برای تولید کلیدی به نام key:

javax.crypto.KeyGenerator keygen =
javax.crypto.KeyGenerator.getInstance("AES");
java.security.SecureRandom random =
new java.security.SecureRandom();
keygen.init(random);
java.security.Key key = keygen.generateKey();





یه سوال از متخصصین برنامه نویس

15 04 2009

من تو قسمت امنیت چیچک به یه مشکل برخوردم که پرس و جو از دوستان و استاد ها برام نتیجه ای در بر نداشت. مساله اینه: چیچک یه فایل Properties داره که اطلاعاتی مثل نوع Look And Feel و وضعیت System Tray توی اون ذخیره می شه. از جمله چیز های دیگه که توی این فایل ذخیره می شه User name و Password وبسایت هایی مثل Twitter هستش که از نظر امنیتی این وضع خوبی نیست. من باید بتونم Password ها رو با یه الگوریتم بازگشت پذیر (دقت کنید که توابع Hash مثل MD5 به کار نمیاد) این ها رو کد کنم و در موقع نیاز اون ها رو بازیافت.

پیشاپیش بگم که RSA بهم جواب نمی ده یا حد اقل نمی تونم راهی به دست بیارم که با RSA این وضع رو کنترل کنم.
فراموش نکنید که چیچک یه برنامه ی Open Source هم هست و از هر الگوریتمی که استفاده کنم، به راحتی می شه الگوریتم رو خوند و پیدا کرد.

منتظر نظراتتون هستم.


بعد نوشت:

خب مساله رو می شه یکم تغییر داد به این صورت که من یه data دارم به اسم d و یه کلید عمومی دارم به pubKey و یه کلید اختصاصی دارم به نام privKey. خب d رو با pubKey کد می کنم (حالا با هر الگوریتمی) و d کد شده رو که اسمش cd هست رو یه جایی ذخیره می کنم. کنار cd هم می تونم برای کد کردن های بعد به راحتی pubKey رو ذخیره کنم. مشکل جدید این privKey هستش به این معنی که هر جایی که این رو ذخیره کنم، امنیت به خطر میفته و اگه این privKey رو نداشته باشم، از cd نمی تونم به d برسم. نمی تونم از حافظه ی کاربر برای نگه داری این privKey استفاده کنم چون:

  1. ممکنه این privKey مقدار خوش قلقی برای حفظ کردن نداشته باشه.
  2. کاربر ممکنه privKey رو فراموش کنه که در این صورت d هم از بین می ره.
  3. privKey رو الگوریتم به من می ده و نمی تونم خودم اون رو تولید کنم.

این ها برای الگوریتم های asymmetric بود ولی دقیقا همین مشکل رو برای الگوریتم های symmetric هم دارم.

نظر شما چیه؟


بعد نوشت:

الگوریتم AES (لینک تکمیلی) هم بررسی شد، جزو symmetric الگوریتم هاست و مشکل بالا همچنان برقراره.


راه حل:

بعضی از دوستان متن باز بودن رو مغایر با امن بودن دونستن. اما بالا خره من یه راه حل برای سوالم پیدا کردم. من الگوریتم AES رو پیاده می کنم و کلید رو توی خود سورس کد به صورت امن ذخیره می کنم. اینطور بعد از کامپایل کلید جای امنی خواهد داشت. اما چون اپن سورس هست پروژه، هرکسی که می خواد از سورس کامپایل کنه، می تونه کلید خودش رو توی سورس کد قرار بده. به همین راحتی!

به زودی این مشکل امنیتی چیچک رو برطرف می کنم.





انتشار چیچک

9 04 2009

بعد از مدت ها بالاخره سیستم میکرو بلاگینگ Identica رو به «چیچک» اضافه کردم و بالاخره نسخه ی اول قابل انتشار «چیچک» رو آماده کردم. می تونید «چیچک» رو دانلود کنید و البته فقط به صورت آزمایشی و برای پیدا کردن مشکلات اون این انتشار صورت می گیری.

برای اجرای «چیچک» نیاز به ماشین مجازی جاوا هست که یا از خود وب سایت جاوا اون رو دانلود کنید (که البته ایرانی ها نمی تونن این کار رو انجام بدن. من جدید ترین نسخه ی این برنامه رو برای ویندوز دانلود کردم و مجددا در یک فضای دیگه آپلود کردم تا بتونید به راحتی این برنامه رو نصب کنید.) یا از این فایل آپلود شده توسط من این برنامه رو برای ویندوز بگیرین. برای اوبونتو و ساید توزیع های گنو/لینوکس هم می تونید اون رو از مخازن موجود بدون هیچ دردسری نصب کنن.

کاربران ویندوز می تونن فایل اجرایی «چیچک» رو از این لینک بگیرن وکاربران سیستم عامل های دیگه (و البته ویندوز) فایل JAR «چیچک» (که قابل اجرا روی تمام سیستم عامل های پشتیبانی شده هست) رو از این لینک دانلود کنن.

منتظر نظراتتون برای بهبود «چیچک» هستم.