معمولا یکی از فصلهای کتاب ساختمان دادهها درباره رمزگذاری و رمزگشایی است که توسط استادهای عزیز تدریس نمیشود! نمیدانم که در سرفصلهای این درس هم هست یا نه.
رمزگذاری و رمزگشایی را میتوان کنار اعمال دیگری که روی رشته ها انجام میشود قرار داد از قبیل :الحاق و محاسبه طول و ... در رمزگذاری هدف تغییر دادن متن ساده به متنی غیر قابل درک و سری است که درصورت لزوم میتوان آن را به متن اولیه تبدیل کرد(رمزگشایی).
ساده ترین عملی که برای رمزگذاری انجام میشود جانشینی است. در این روش هر کاراکتر با کاراکتر دیگری تعویض میشود. به عنوان مثال کد اسکی هر کاراکتر از 255 کم میشود. به این ترتیب کاراکتر (A(65 به 255-65=190 تبدیل میشود. عمل جانشینی را میتوان با استفاده از بک جدول نیز انجام داد. این جدول یک تناظر یک به یک بین کاراکتر ساده و کاراکتر رمزی آن برقرار میکند. برای مثال جدول زیر را درنظر بگیرید
A B C D E F
H T J K A Y
در این صورت اگر متن ساده برابر با CAD باشد به متن رمزی JHK تبدیل میشود.
بنظر نمیرسد چنین استفاده های ساده ای از روش جانشینی چندان قابلیت اطمینانی داشته باشد. برای مثال در مورد فرمولی که ما استفاده کردیم، اگر کسی که قصد رمزگشایی داشته باشد فقط یک کاراکتر از متن را بداند میتواند الگریتم رمزگذاری ما را کشف کند.
روش دیگر رمزگذاری روش جایگشت است. در این روش کاراکترهای متن اصلی جابجا میشوند. برای مثال کاراکتر اول به مکان سوم و کاراکتر سوم به مکان دوم و دومی به جای کاراکتر اول منتقل میشوند. یعنی رشته ali به lia تبدیل میشود.
با ترکیب کردن این دو روش میتوان الگریتم های پیچیده ای ایجاد کرد. اما همه آنها به شدت آسیبپذیر خواهند بود. تصور کنید که علی میخواهد یک نامه به مریم بفرستد(وای وای وای!) که متن آن بسیار محرمانه است! او برنامه رمزگشا را به مریم میدهد و نامه را برای او میفرستد. تا اینجای کار ایرادی ندارد ولی از آنجا که علی برای نرگس هم نامههای محرمانه ای میفرستد باید برنامه رمزگشا را به نرگس هم بدهد. حالا اگر نرگس نامهای که علی به مریم فرستاده بود بدست بیاورد میتواند به راحتی آن را کشف رمز کند. و .... مگر خدا به داد علی برسد!
اجازه بدهید فرمول جانشینی را کمی تغییر دهیم chr + X) mod 255) در اینجا chr کاراکتری است که باید رمز شود و X عددی است که کاربر وارد میکند. به این ترتیب کاربری که میخواهد متن را کشف رمز کند باید مقدار Xای که متن با استفاده از آن رمز شده است را بداند. در این قبیل الگریتمها به X "کلید خصوصی" میگویند. و به خود الگریتم "الگریتم رمزگذاری کلید خصوصی" یا "الگریتم رمزگذاری متقارن" میگویند. متقارن به این دلیل که کلید رمزگذاری و رمزگشایی یکی است.
ازجمله الگریتمهای رمزگذاری کلید خصوصی میتوان به "استاندارد رمزگذاری دادهها(Data Encryption Standard) اشاره کرد.
DES :
این الگریتم یکی از پراستفادهترین الگریتمهای رمزگذاری است. اگر نگاهی به الگریتم جانشینی اصلاح شده ای که نوشتیم بیندازید متوجه میشود که با حداکثر 255 بار آزمایش کلید خصوصی پیدا میشود. ولی در DES وضع کمی!! فرق میکند. در الگریتم ما کلید خصوصی یکی از 255 کلید محتمل بود. اما در DES بیش از 72000000000000000 محتمل است!
عناصر اصلی این الگریتم را یک کلید رمز (کلید خصوصی) و یک بردار اولیه(جایگشت اولیه) تشکیلی میدهند. ابتدا متن رمزی به بلوکهای 64 بیتی تبدیل میشود و جایگشت اولیه(که یک جدول 64 خانهای است) روی آن اعمال میشود. برای مثال اگر خانه اول جدول جایگشت اولیه 10 باشد. بیت اول به مکان 10هم میرود.
سپس متن 64 بیتی به دو بخش 32 بیتی تبدیل میشود که آنها را L0 و R0 مینامیم. پس از آن با استفاده از کلید K1 و تابع F ، R0 رمز میشود(F(R0,K1 و در مرحله بعد از آن (F(R0,K1 با L0 یای انحصاری (XOR) میشود و R1 را برای مرحله دوم ایجاد میکند. اما مرحله دوم نیاز به L1 نیز دارد. L1 برابر با R0 است. این عمل تا مرحله 16 ادامه میابد. پس از مرحله آخر دو بلوک 32 بیتی به هم متصل میشوند و یک بلوک 64 بیتی رمز را ایجاد میکنند.
این الگریتم سال 1977 در شرکت IBM ایجاد شد و سازمان دفاع آمریکا آن را در اختیار گرفت. شماره استاندارد آن ANSI X3.92 و X3.106 است.
در سال 1997 مالک RSA(یک الگریتم رمزگذاری کلید عمومی) جایزه 10000 دلاری برای شکستن DES تایین کرد. یک شرکت با استفاده از 14000 کامپیوتر در اینترنت اقدام به آزمایش کلید برای یک متن رمز شده DES کرد و پس از آزمایش تنها 18گرادیلیون(18 با 24 تا صفر) از 72گرادیلیون موفق شد رمز را کشف کند. امروزه احتمالا تعداد کمی از پیغامهایی که با استفاده از DES فرستاده میشوند با این روش شکسته میشوند.
درمورد استاندار شدن این الگریتم هم بحث های زیادی شده است که آیا کلید 48 بیتی که در جایگشت اولیه استفاده میشود به اندازه کافی طولانی هست؟ و اینکه آیا کلیدهای جانشینی به اندازه کافی پیچیده هستند؟
DES در VS.Net
VS.Net از تعدادی از الگریتمهای رمزگذاری مهم از جمله DES پشتیبانی میکند.
مثالی که در زیر آمده است یک متن را رمز کرده و در TextBox2 مینویسد. پس از آن آن متن را رمزگشایی کرده و در TextBox1 مینویسد. کلید خصوصی و بردار اولیه تصادفی انتخاب میشوند.
Dim des As New DESCryptoServiceProvider()
Dim inputArray() As Byte = System.Text.Encoding.UTF8.GetBytes("Data Encryption")
Dim ms As New IO.MemoryStream()
Dim encCS As New CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)
Dim key() As Byte = des.Key
Dim IV() As Byte = des.IV
encCS.Write(inputArray, 0, inputArray.Length)
encCS.FlushFinalBlock()
TextBox2.Text = System.Text.Encoding.UTF8.GetString(ms.ToArray)
ms.Seek(0, IO.SeekOrigin.Begin)
Dim decCS As New CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Read)
Dim sr As New IO.StreamReader(decCS)
TextBox1.Text = sr.ReadToEnd()
مرجعها : MSDN ، ساختمان دادهها در ++C نوشته لاری نایهف، ترجمه جعفرنژاد و Whatis.com
رمزگذاری و رمزگشایی را میتوان کنار اعمال دیگری که روی رشته ها انجام میشود قرار داد از قبیل :الحاق و محاسبه طول و ... در رمزگذاری هدف تغییر دادن متن ساده به متنی غیر قابل درک و سری است که درصورت لزوم میتوان آن را به متن اولیه تبدیل کرد(رمزگشایی).
ساده ترین عملی که برای رمزگذاری انجام میشود جانشینی است. در این روش هر کاراکتر با کاراکتر دیگری تعویض میشود. به عنوان مثال کد اسکی هر کاراکتر از 255 کم میشود. به این ترتیب کاراکتر (A(65 به 255-65=190 تبدیل میشود. عمل جانشینی را میتوان با استفاده از بک جدول نیز انجام داد. این جدول یک تناظر یک به یک بین کاراکتر ساده و کاراکتر رمزی آن برقرار میکند. برای مثال جدول زیر را درنظر بگیرید
A B C D E F
H T J K A Y
در این صورت اگر متن ساده برابر با CAD باشد به متن رمزی JHK تبدیل میشود.
بنظر نمیرسد چنین استفاده های ساده ای از روش جانشینی چندان قابلیت اطمینانی داشته باشد. برای مثال در مورد فرمولی که ما استفاده کردیم، اگر کسی که قصد رمزگشایی داشته باشد فقط یک کاراکتر از متن را بداند میتواند الگریتم رمزگذاری ما را کشف کند.
روش دیگر رمزگذاری روش جایگشت است. در این روش کاراکترهای متن اصلی جابجا میشوند. برای مثال کاراکتر اول به مکان سوم و کاراکتر سوم به مکان دوم و دومی به جای کاراکتر اول منتقل میشوند. یعنی رشته ali به lia تبدیل میشود.
با ترکیب کردن این دو روش میتوان الگریتم های پیچیده ای ایجاد کرد. اما همه آنها به شدت آسیبپذیر خواهند بود. تصور کنید که علی میخواهد یک نامه به مریم بفرستد(وای وای وای!) که متن آن بسیار محرمانه است! او برنامه رمزگشا را به مریم میدهد و نامه را برای او میفرستد. تا اینجای کار ایرادی ندارد ولی از آنجا که علی برای نرگس هم نامههای محرمانه ای میفرستد باید برنامه رمزگشا را به نرگس هم بدهد. حالا اگر نرگس نامهای که علی به مریم فرستاده بود بدست بیاورد میتواند به راحتی آن را کشف رمز کند. و .... مگر خدا به داد علی برسد!
اجازه بدهید فرمول جانشینی را کمی تغییر دهیم chr + X) mod 255) در اینجا chr کاراکتری است که باید رمز شود و X عددی است که کاربر وارد میکند. به این ترتیب کاربری که میخواهد متن را کشف رمز کند باید مقدار Xای که متن با استفاده از آن رمز شده است را بداند. در این قبیل الگریتمها به X "کلید خصوصی" میگویند. و به خود الگریتم "الگریتم رمزگذاری کلید خصوصی" یا "الگریتم رمزگذاری متقارن" میگویند. متقارن به این دلیل که کلید رمزگذاری و رمزگشایی یکی است.
ازجمله الگریتمهای رمزگذاری کلید خصوصی میتوان به "استاندارد رمزگذاری دادهها(Data Encryption Standard) اشاره کرد.
DES :
این الگریتم یکی از پراستفادهترین الگریتمهای رمزگذاری است. اگر نگاهی به الگریتم جانشینی اصلاح شده ای که نوشتیم بیندازید متوجه میشود که با حداکثر 255 بار آزمایش کلید خصوصی پیدا میشود. ولی در DES وضع کمی!! فرق میکند. در الگریتم ما کلید خصوصی یکی از 255 کلید محتمل بود. اما در DES بیش از 72000000000000000 محتمل است!
عناصر اصلی این الگریتم را یک کلید رمز (کلید خصوصی) و یک بردار اولیه(جایگشت اولیه) تشکیلی میدهند. ابتدا متن رمزی به بلوکهای 64 بیتی تبدیل میشود و جایگشت اولیه(که یک جدول 64 خانهای است) روی آن اعمال میشود. برای مثال اگر خانه اول جدول جایگشت اولیه 10 باشد. بیت اول به مکان 10هم میرود.
سپس متن 64 بیتی به دو بخش 32 بیتی تبدیل میشود که آنها را L0 و R0 مینامیم. پس از آن با استفاده از کلید K1 و تابع F ، R0 رمز میشود(F(R0,K1 و در مرحله بعد از آن (F(R0,K1 با L0 یای انحصاری (XOR) میشود و R1 را برای مرحله دوم ایجاد میکند. اما مرحله دوم نیاز به L1 نیز دارد. L1 برابر با R0 است. این عمل تا مرحله 16 ادامه میابد. پس از مرحله آخر دو بلوک 32 بیتی به هم متصل میشوند و یک بلوک 64 بیتی رمز را ایجاد میکنند.
این الگریتم سال 1977 در شرکت IBM ایجاد شد و سازمان دفاع آمریکا آن را در اختیار گرفت. شماره استاندارد آن ANSI X3.92 و X3.106 است.
در سال 1997 مالک RSA(یک الگریتم رمزگذاری کلید عمومی) جایزه 10000 دلاری برای شکستن DES تایین کرد. یک شرکت با استفاده از 14000 کامپیوتر در اینترنت اقدام به آزمایش کلید برای یک متن رمز شده DES کرد و پس از آزمایش تنها 18گرادیلیون(18 با 24 تا صفر) از 72گرادیلیون موفق شد رمز را کشف کند. امروزه احتمالا تعداد کمی از پیغامهایی که با استفاده از DES فرستاده میشوند با این روش شکسته میشوند.
درمورد استاندار شدن این الگریتم هم بحث های زیادی شده است که آیا کلید 48 بیتی که در جایگشت اولیه استفاده میشود به اندازه کافی طولانی هست؟ و اینکه آیا کلیدهای جانشینی به اندازه کافی پیچیده هستند؟
DES در VS.Net
VS.Net از تعدادی از الگریتمهای رمزگذاری مهم از جمله DES پشتیبانی میکند.
مثالی که در زیر آمده است یک متن را رمز کرده و در TextBox2 مینویسد. پس از آن آن متن را رمزگشایی کرده و در TextBox1 مینویسد. کلید خصوصی و بردار اولیه تصادفی انتخاب میشوند.
Dim des As New DESCryptoServiceProvider()
Dim inputArray() As Byte = System.Text.Encoding.UTF8.GetBytes("Data Encryption")
Dim ms As New IO.MemoryStream()
Dim encCS As New CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)
Dim key() As Byte = des.Key
Dim IV() As Byte = des.IV
encCS.Write(inputArray, 0, inputArray.Length)
encCS.FlushFinalBlock()
TextBox2.Text = System.Text.Encoding.UTF8.GetString(ms.ToArray)
ms.Seek(0, IO.SeekOrigin.Begin)
Dim decCS As New CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Read)
Dim sr As New IO.StreamReader(decCS)
TextBox1.Text = sr.ReadToEnd()
مرجعها : MSDN ، ساختمان دادهها در ++C نوشته لاری نایهف، ترجمه جعفرنژاد و Whatis.com
کوچیک ::: جمعه 86/6/30::: ساعت 1:35 صبح
نظرات دیگران: نظر
سایت: ccwmagazine.com
امیررضا قویدل nep312@yahoo.com
مقدمه:
از چند سال پیش در کشورمان، استفاده از کامپیوتر با سرعت سرسامآوری جای خود را در تمامی عرصهها باز کرد و سیل کامپیوترهای شخصی و تجهیزات جانبی آنها به سوی کشور سرازیر شد. اما بایستی اعتراف کرد که با وجود این که سرعت سوق به سوی تکنولوژی دیجیتال در ایران روند خوبی را طی نموده، اما در زمینه ارائه اطلاعات و پردازش آن به زبان فارسی تشتتی در این میان ایجاد گردید. یکی از عوامل موثر در این ناهماهنگی، نبود الگویی واحد برای ذخیره و پردازش و نمایش اطلاعات بر روی رسانههای جدید اطلاعرسانی همچون کامپیوتر در سطح ملی است.
نرمافزارهای متفاوت، با فرمتهای مختلف، کدهای فارسی گوناگون و ... در حال استفادهاند و روزانه میزان قابل توجهی از اطلاعات را در خود جای میدهند. اگر از آن دسته از مراکزی که به دلیل عدم آگاهی کافی اطلاعات را به صورت ناقص جمعآوری و وارد میکنند (که حدود 80 درصد جامعه مورد نظر را تشکیل میدهند) بگذریم به تفرق، اختلاف و اعمال سلیقههای مختلف در سایر مراکز خواهیم رسید که برای نمونه به اختلاف در مورد کدنویسههای به کار رفته برای حروف فارسی روی کامپیوتر میتوان اشاره کرد.
نتیجه ادامه روند جاری
در مورد مراکزی که به هر حال مشغول سرمایهگذاری در بخش ورود، پردازش و نمایش اطلاعات هستند مسئله به نوع دیگری خود را نشان خواهد داد. این گونه مراکز تا زمانی که پای خود را از محدوده مرکز خود فراتر نگذاشتهاند مشکلی نخواهند داشت، ولی به محض آنکه بخواهند با مراکز اطلاعاتی و تحقیقاتی دیگر ارتباط برقرار کرده یا به مبادله اطلاعات با این مرکز بپردازند متوجه خواهند شد که سالها سرمایههای خود را بر باددادهاند.
همین مشکل در سطح ملی برای ایجاد یک مرکز اطلاعات ملی رخ خواهد نمود. زمانی این مشکل ملی بیشتر نمود پیدا میکند که بحث شبکه جهانی اینترنت نیز به میان آید.
اینترنت به عنوان کلیدی برای ارتباط با دیگر مراکز اطلاعاتی - به علت در دسترس بودن آسان و همچنین حجم عظیم اطلاعات موجود در آن- یکی از مهمترین موضوعاتی خواهد بود که به علت عدم وجود یک سیستم جهانی برای ذخیره، بازیابی، پردازش و نمایش اطلاعات و به طور کلی مبادله اطلاعات که جنبههای ملی نیز داشته باشد، دارای نقاط ضعفی است که ما را از بهرهبرداری مناسب در جهت منافعمان باز میدارد.
راه حل چیست؟
از زمانی که اولین گزارش «زبان فارسی و کامپیوتر» در سال 1356 در دانشکده ریاضی و کامپیوتر دانشگاه صنعتی شریف ارائه شد، تا امروز که شبکه اینترنت چهره دیگری به اطلاعرسانی داده است، مدت زیادی میگذرد. امروزه دیگر محدودیتهای سختافزاری یا نرمافزاری نمیتواند مانع پیادهسازی یک سیستم ذخیرهسازی، نمایش، و تبادل اطلاعات چندزبانه گردد. امروزه مؤسسات بزرگ استانداردسازی چون ایزو ( ISO ) و W3 Consortium نیز، در استانداردهایشان مشکلات و مسائل مربوط به جهانیسازی را در نظر میگیرند تا امر تبادل اطلاعات چند زبانه را تسهیل نمایند. اما به نظر میرسد که به دلیل عدم حضور ایرانیان و فارسیزبانها در این روند، زبان فارسی قدری غریب مانده و کمتر به آن توجه شده است. به عنوان مثال، هنوز در بین صدها مجموعهنویسه( Character Set ) ثبت شده در اینترنت توسط یانا (Internet Assigned Number Authority)، تنها یک مجموعهنویسه ثبت شده متعلق به زبان فارسی است که آن هم کد پیج اختصاصی شرکت آیبیام است. حتی در مورد استاندارد کلی تبادل اطلاعات نیز قالبی که مورد توافق همه باشد وجود ندارد. سه قالب موجود، ایران سیستم، استاندارد 2900 و استاندارد 3342 ، هر یک ایراداتی دارند که سبب شده است شرکتها و مؤسسات داخلی به جدولهای خاص خود روی آورند تا بتوانند نیازهای خود را تا حدی رفع سازند.
اخیراً راهحلهایی در هر یک از مسائل خاص مربوط به تبادل اطلاعات برای بینالمللیسازی در نظر گرفته شده است که با وجود این که این موارد کاملتر از جداولی است که در ایران برای حل مشکلات تبادل اطلاعات زبان فارسی ایجاد گردیده، ولی به خاطر عدم وجود مراجع موثق در مورد خط و زبان فارسی برای استانداردگذاران، مسائل خاص این زبان یا در نظر گرفته نشده و یا به شکل ناقص منظور شده است. خوشبختانه بسیاری از این استانداردها امکان گسترش بعدی را در نظر گرفتهاند که روند تصحیح را تسهیل میکند.
یونیکد چیست؟
از جمله استانداردهای بینالمللی که کاملتر از بقیه استانداردهای موجود به رفع نیازهای مربوط به تبادل اطلاعات چندزبانه پرداختهاست، میتوان به استاندارد یونیکد اشاره کرد.
این استاندارد، تقریباً توسط تمامی شرکتهای بینالمللی کامپیوتری، مانند آیبیام، مایکروسافت، و سان، و نیز موسسات ملی استاندارد در کشورهای مختلف جهان برای تبادل اطلاعات چندزبانه مورد توافق قرار گرفته است و سرعت رشد بسیار زیادی نیز در میان کاربران دارد. همینطور، در حال حاضر کلیه استانداردهای جدیدی که برای شبکه اینترنت طراحی میشوند، این دو استاندارد را بهعنوان کدپیج پیشفرض میپذیرند که استاندارد XML و زبان جاوا از آن جملهاند.
به زبان ساده میتوان گفت که یونیکد روشی برای تبدیل متون به رشتههای عددی قابل ذخیره در کامپیوتر است. روشهای گوناگونی برای این کار وجود دارند، ولی مزیت یونیکد نسبت به آنها، این است که یک روش کامل جهانی است؛ به این معنی که حروف همه زبانهای دنیا و تمامی علائم مورد استفاده همه مردم جهان در آن آمدهاند و همچنین در همهجا قابل نمایش است و نیاز به امکانات خاصی ندارد. البته یونیکد هنوز جوان است ولی امروزه بسیاری نرمافزارهای رایج در جهان (از جمله همه مرورگرهای جدید اینترنت) آن را پشتیبانی میکنند.
از مهمترین مزایایی که یونیکد برای زبان فارسی دارد (مثل بسیاری زبانهای دیگر) میتوان موارد زیر را نام برد:
1. در نسخه استاندارد هر نرمافزاری که از این استاندارد پشتیبانی کند، میتوان فارسی نوشت یا متون فارسی را خواند. بدین ترتیب دیگر نیازی به تأمین نسخههای خاص فارسی یا عربی نیست.
2. برای خواندن متون فارسی که توسط شرکت خاصی نوشته شدهاند، نیازی به داشتن فونت خاص آن شرکت نداریم و هر متن فارسی که با استاندارد یونیکد، کدگذاری شده باشد، با هر فونت یونیکدی قابل مشاهده است.
3. امکان استفاده همزمان از زبانهای فارسی و انگلیسی را تأمین میکند.
4. بدون استفاده از فونتهای خاص امکان استفاده از علائم خاص را فراهم میکند.
به بیان دیگر، «استاندارد یونیکد» استاندارد جهانی کدگذاری کارکترهاست که برای پردازش کامپیوتری متون به کار میرود. این استاندارد همان کاراکترها و کدهای استاندارد ISO/IEC 10646 را داراست و کاملا با آن سازگار است. پس در واقع هر پیادهسازی سازگار با یونیکد، با ISO/IEC 10646 نیز سازگار است.
یونیکد امکان کدگذاری همه کاراکترهای مورد استفاده در نوشتن زبانهای دنیا را فراهم آوردهاست. این استاندارد از کدگذاری 16بیتی استفاده میکند که برای بیش از65000 نویسه (کاراکتر) جا فراهم میکند. اگر چه 65000 نویسه برای کدگذاری اکثر نویسههایی که در زبانهای مهم دنیا استفاده میشود کافی است، با این حال یونیکد شیوهگسترشی بهنام UTF-16 فراهمکردهاست که امکان اضافهکردن حدود یک میلیون نویسه دیگر را نیز میدهد. این دامنه برای کلیه نویسههای عالم، از جمله پوشش کامل همه خطهای باستانی (همچون خط میخی) نیز کافی است.
یونیکد برای کلیه نویسههای مورد استفاده در زبانهای عمده دنیا کد تعیینکردهاست. بهعلت گستردهبودن فضای تخصیص نویسه، این استاندارد بسیاری از نمادهای لازم برای حروفچینی را نیز در بر گرفتهاست. از خطهای مورد پشتیبانی این استاندارد میتوان به لاتین (دربرگیرنده اکثر زبانهای اروپایی)، سیریلیک(روسی، صربی)، یونانی، عربی (شامل عربی، فارسی، اردو، کردی)، عبری، هندی، ارمنی، آسوری، چینی، کاتاکانا و هیراگانا(ژاپنی)، و هانگول (کرهای) اشارهکرد. بهعلاوه، تعداد زیادی نماد ریاضی و فنی علائم نقطهگذاری، پیکان، و علامتهای متفرقهدر این استاندارد وجود دارد. این استاندارد برای علامتهای ترکیبشونده یا اعرابها نیز کدهایی در نظر گرفتهاست کهاز جمله آنها علامتهایی چون «˜» (مد)هستند که در ترکیبب حروف پایه، حروف تغییرلحن یافتهای چون «ñ» را میسازند.
به طور کلی، بعضی از مشخصات یونیکد به شرح زیر است:
نویسههای شانزدهبیتی
یکیسازی (اختصاص یک کد به نویسههای مشترک در چند زبان مختلف)
نویسه، نه شکل (یک «ع»، و نه چهارتا: «ﻋ»، «ﻌ»، «ﻊ»، «ﻉ»)
بار معنایی (حرفبودن، مقدار عددی، ...)
در استاندارد یونیکد، نویسههای فارسی در بلوک مربوط بهخط عربی قرار دارند. این بلوکبرای دربرگرفتن نویسههای زبانهایی کهاز خط عربیاستفادهمیکنند، مثل فارسی، اردو، پشتو، سندی، و کردی گسترش یافته است. این بلوک نشانههای قرآنی از قبیل نشانههای سجده و پایان آیه، و علائم وقف را نیز در بردارد.
در یونیکد با وجود یکیسازی کدهای حروف مشترک، برای حروف فارسی که بار معنایی یا نمایشی متفاوت با حروف عربی دارند، نویسههای جداگانه درنظر گرفتهشدهاست. یعنی کلیه حروف خاص فارسی (پ، چ، ژ، گ) و نیز «ک» و «ی» فارسی کهبا حرف مشابهدر عربیتفاوت نمایشی دارند، مکانجداگانهای بهخود اختصاص دادهاند. کلیه اعرابهای متداول حضور دارند و میان شکلفارسی/اردو و عربی ارقام نیز بهعلت شکل و رفتار متفاوت، تفاوتهایی منظور گشتهاست.
از طرف دیگر، علائم نقطهگذاری چون نقطه و فاصله کهشکلی کسانیدر خطهای لاتین و عربی دارند، کد یکسان دارند. علائمیچون پرانتز نیز، بسته به جهت متن، آینهای میشوند، به طور مثال، نویسه 0028 نماینده «پرانتز باز» است، و نه«پرانتز سمتچپ». یونیکد اتصالمجازی و فاصله مجازی را نیز تحتنامهای «اتصال با عرضصفر» و «بیاتصالی با عرضصفر» بهرسمیت میشناسد.
بدن ترتیب ملاحظه میشود که برای حل مشکلات موجود، و نیز رفتن به سوی یک استاندارد مقبول و همهجانبه، استاندارد یونیکد، روشی مناسب به نظر میرسد. در شمارههای آتی ماهنامه نیز به این موضوع از جنبههای دیگر خواهیم پرداخت.
اصطلاحات:
نویسه: در مقابل character. کوچکترین واحد متن. مثلاً یک حرف لاتین، یک اعراب فارسی، یکی علامت نقطهگذاری، یک نشانه بریل، یا یک نماد ریاضی
شکل: در مقابل glyph. کوچکترین واحد نمایش متن. برای بعضی نویسهها مثل حروف فارسی و هندی ممکن است چند شکل موجود باشد. مثلاً « ﺑ » و « ﻊ » از اشکالنمایشی محسوب میشوند
مجموعهنویسه: در مقابلcharacter set. مجموعهای از نویسهها کهبههر نویسه عددی اختصاصمیدهد که نماینده آن نویسه محسوب میشود و در تبادل اطلاعات مورد استفادهقرار میگیرد
مجموعه کد: در مقابل codepage. سیستمی که بههر نویسه دنباله مشخصیاز بایتها را متناظر میکند. مجموعهنویسهها میتوانند بهشکل یا چند مجموعهکد قابل استفادهباشند.
منابع:
مرکز محاسبات دانشگاه صنعتی شریف http://www.sharif.ac.ir/
سازمان مدیریت و برنامهریزی کشور
شورای عالی انفورماتیک http://www.unicode.org/
امیررضا قویدل nep312@yahoo.com
مقدمه:
از چند سال پیش در کشورمان، استفاده از کامپیوتر با سرعت سرسامآوری جای خود را در تمامی عرصهها باز کرد و سیل کامپیوترهای شخصی و تجهیزات جانبی آنها به سوی کشور سرازیر شد. اما بایستی اعتراف کرد که با وجود این که سرعت سوق به سوی تکنولوژی دیجیتال در ایران روند خوبی را طی نموده، اما در زمینه ارائه اطلاعات و پردازش آن به زبان فارسی تشتتی در این میان ایجاد گردید. یکی از عوامل موثر در این ناهماهنگی، نبود الگویی واحد برای ذخیره و پردازش و نمایش اطلاعات بر روی رسانههای جدید اطلاعرسانی همچون کامپیوتر در سطح ملی است.
نرمافزارهای متفاوت، با فرمتهای مختلف، کدهای فارسی گوناگون و ... در حال استفادهاند و روزانه میزان قابل توجهی از اطلاعات را در خود جای میدهند. اگر از آن دسته از مراکزی که به دلیل عدم آگاهی کافی اطلاعات را به صورت ناقص جمعآوری و وارد میکنند (که حدود 80 درصد جامعه مورد نظر را تشکیل میدهند) بگذریم به تفرق، اختلاف و اعمال سلیقههای مختلف در سایر مراکز خواهیم رسید که برای نمونه به اختلاف در مورد کدنویسههای به کار رفته برای حروف فارسی روی کامپیوتر میتوان اشاره کرد.
نتیجه ادامه روند جاری
در مورد مراکزی که به هر حال مشغول سرمایهگذاری در بخش ورود، پردازش و نمایش اطلاعات هستند مسئله به نوع دیگری خود را نشان خواهد داد. این گونه مراکز تا زمانی که پای خود را از محدوده مرکز خود فراتر نگذاشتهاند مشکلی نخواهند داشت، ولی به محض آنکه بخواهند با مراکز اطلاعاتی و تحقیقاتی دیگر ارتباط برقرار کرده یا به مبادله اطلاعات با این مرکز بپردازند متوجه خواهند شد که سالها سرمایههای خود را بر باددادهاند.
همین مشکل در سطح ملی برای ایجاد یک مرکز اطلاعات ملی رخ خواهد نمود. زمانی این مشکل ملی بیشتر نمود پیدا میکند که بحث شبکه جهانی اینترنت نیز به میان آید.
اینترنت به عنوان کلیدی برای ارتباط با دیگر مراکز اطلاعاتی - به علت در دسترس بودن آسان و همچنین حجم عظیم اطلاعات موجود در آن- یکی از مهمترین موضوعاتی خواهد بود که به علت عدم وجود یک سیستم جهانی برای ذخیره، بازیابی، پردازش و نمایش اطلاعات و به طور کلی مبادله اطلاعات که جنبههای ملی نیز داشته باشد، دارای نقاط ضعفی است که ما را از بهرهبرداری مناسب در جهت منافعمان باز میدارد.
راه حل چیست؟
از زمانی که اولین گزارش «زبان فارسی و کامپیوتر» در سال 1356 در دانشکده ریاضی و کامپیوتر دانشگاه صنعتی شریف ارائه شد، تا امروز که شبکه اینترنت چهره دیگری به اطلاعرسانی داده است، مدت زیادی میگذرد. امروزه دیگر محدودیتهای سختافزاری یا نرمافزاری نمیتواند مانع پیادهسازی یک سیستم ذخیرهسازی، نمایش، و تبادل اطلاعات چندزبانه گردد. امروزه مؤسسات بزرگ استانداردسازی چون ایزو ( ISO ) و W3 Consortium نیز، در استانداردهایشان مشکلات و مسائل مربوط به جهانیسازی را در نظر میگیرند تا امر تبادل اطلاعات چند زبانه را تسهیل نمایند. اما به نظر میرسد که به دلیل عدم حضور ایرانیان و فارسیزبانها در این روند، زبان فارسی قدری غریب مانده و کمتر به آن توجه شده است. به عنوان مثال، هنوز در بین صدها مجموعهنویسه( Character Set ) ثبت شده در اینترنت توسط یانا (Internet Assigned Number Authority)، تنها یک مجموعهنویسه ثبت شده متعلق به زبان فارسی است که آن هم کد پیج اختصاصی شرکت آیبیام است. حتی در مورد استاندارد کلی تبادل اطلاعات نیز قالبی که مورد توافق همه باشد وجود ندارد. سه قالب موجود، ایران سیستم، استاندارد 2900 و استاندارد 3342 ، هر یک ایراداتی دارند که سبب شده است شرکتها و مؤسسات داخلی به جدولهای خاص خود روی آورند تا بتوانند نیازهای خود را تا حدی رفع سازند.
اخیراً راهحلهایی در هر یک از مسائل خاص مربوط به تبادل اطلاعات برای بینالمللیسازی در نظر گرفته شده است که با وجود این که این موارد کاملتر از جداولی است که در ایران برای حل مشکلات تبادل اطلاعات زبان فارسی ایجاد گردیده، ولی به خاطر عدم وجود مراجع موثق در مورد خط و زبان فارسی برای استانداردگذاران، مسائل خاص این زبان یا در نظر گرفته نشده و یا به شکل ناقص منظور شده است. خوشبختانه بسیاری از این استانداردها امکان گسترش بعدی را در نظر گرفتهاند که روند تصحیح را تسهیل میکند.
یونیکد چیست؟
از جمله استانداردهای بینالمللی که کاملتر از بقیه استانداردهای موجود به رفع نیازهای مربوط به تبادل اطلاعات چندزبانه پرداختهاست، میتوان به استاندارد یونیکد اشاره کرد.
این استاندارد، تقریباً توسط تمامی شرکتهای بینالمللی کامپیوتری، مانند آیبیام، مایکروسافت، و سان، و نیز موسسات ملی استاندارد در کشورهای مختلف جهان برای تبادل اطلاعات چندزبانه مورد توافق قرار گرفته است و سرعت رشد بسیار زیادی نیز در میان کاربران دارد. همینطور، در حال حاضر کلیه استانداردهای جدیدی که برای شبکه اینترنت طراحی میشوند، این دو استاندارد را بهعنوان کدپیج پیشفرض میپذیرند که استاندارد XML و زبان جاوا از آن جملهاند.
به زبان ساده میتوان گفت که یونیکد روشی برای تبدیل متون به رشتههای عددی قابل ذخیره در کامپیوتر است. روشهای گوناگونی برای این کار وجود دارند، ولی مزیت یونیکد نسبت به آنها، این است که یک روش کامل جهانی است؛ به این معنی که حروف همه زبانهای دنیا و تمامی علائم مورد استفاده همه مردم جهان در آن آمدهاند و همچنین در همهجا قابل نمایش است و نیاز به امکانات خاصی ندارد. البته یونیکد هنوز جوان است ولی امروزه بسیاری نرمافزارهای رایج در جهان (از جمله همه مرورگرهای جدید اینترنت) آن را پشتیبانی میکنند.
از مهمترین مزایایی که یونیکد برای زبان فارسی دارد (مثل بسیاری زبانهای دیگر) میتوان موارد زیر را نام برد:
1. در نسخه استاندارد هر نرمافزاری که از این استاندارد پشتیبانی کند، میتوان فارسی نوشت یا متون فارسی را خواند. بدین ترتیب دیگر نیازی به تأمین نسخههای خاص فارسی یا عربی نیست.
2. برای خواندن متون فارسی که توسط شرکت خاصی نوشته شدهاند، نیازی به داشتن فونت خاص آن شرکت نداریم و هر متن فارسی که با استاندارد یونیکد، کدگذاری شده باشد، با هر فونت یونیکدی قابل مشاهده است.
3. امکان استفاده همزمان از زبانهای فارسی و انگلیسی را تأمین میکند.
4. بدون استفاده از فونتهای خاص امکان استفاده از علائم خاص را فراهم میکند.
به بیان دیگر، «استاندارد یونیکد» استاندارد جهانی کدگذاری کارکترهاست که برای پردازش کامپیوتری متون به کار میرود. این استاندارد همان کاراکترها و کدهای استاندارد ISO/IEC 10646 را داراست و کاملا با آن سازگار است. پس در واقع هر پیادهسازی سازگار با یونیکد، با ISO/IEC 10646 نیز سازگار است.
یونیکد امکان کدگذاری همه کاراکترهای مورد استفاده در نوشتن زبانهای دنیا را فراهم آوردهاست. این استاندارد از کدگذاری 16بیتی استفاده میکند که برای بیش از65000 نویسه (کاراکتر) جا فراهم میکند. اگر چه 65000 نویسه برای کدگذاری اکثر نویسههایی که در زبانهای مهم دنیا استفاده میشود کافی است، با این حال یونیکد شیوهگسترشی بهنام UTF-16 فراهمکردهاست که امکان اضافهکردن حدود یک میلیون نویسه دیگر را نیز میدهد. این دامنه برای کلیه نویسههای عالم، از جمله پوشش کامل همه خطهای باستانی (همچون خط میخی) نیز کافی است.
یونیکد برای کلیه نویسههای مورد استفاده در زبانهای عمده دنیا کد تعیینکردهاست. بهعلت گستردهبودن فضای تخصیص نویسه، این استاندارد بسیاری از نمادهای لازم برای حروفچینی را نیز در بر گرفتهاست. از خطهای مورد پشتیبانی این استاندارد میتوان به لاتین (دربرگیرنده اکثر زبانهای اروپایی)، سیریلیک(روسی، صربی)، یونانی، عربی (شامل عربی، فارسی، اردو، کردی)، عبری، هندی، ارمنی، آسوری، چینی، کاتاکانا و هیراگانا(ژاپنی)، و هانگول (کرهای) اشارهکرد. بهعلاوه، تعداد زیادی نماد ریاضی و فنی علائم نقطهگذاری، پیکان، و علامتهای متفرقهدر این استاندارد وجود دارد. این استاندارد برای علامتهای ترکیبشونده یا اعرابها نیز کدهایی در نظر گرفتهاست کهاز جمله آنها علامتهایی چون «˜» (مد)هستند که در ترکیبب حروف پایه، حروف تغییرلحن یافتهای چون «ñ» را میسازند.
به طور کلی، بعضی از مشخصات یونیکد به شرح زیر است:
نویسههای شانزدهبیتی
یکیسازی (اختصاص یک کد به نویسههای مشترک در چند زبان مختلف)
نویسه، نه شکل (یک «ع»، و نه چهارتا: «ﻋ»، «ﻌ»، «ﻊ»، «ﻉ»)
بار معنایی (حرفبودن، مقدار عددی، ...)
در استاندارد یونیکد، نویسههای فارسی در بلوک مربوط بهخط عربی قرار دارند. این بلوکبرای دربرگرفتن نویسههای زبانهایی کهاز خط عربیاستفادهمیکنند، مثل فارسی، اردو، پشتو، سندی، و کردی گسترش یافته است. این بلوک نشانههای قرآنی از قبیل نشانههای سجده و پایان آیه، و علائم وقف را نیز در بردارد.
در یونیکد با وجود یکیسازی کدهای حروف مشترک، برای حروف فارسی که بار معنایی یا نمایشی متفاوت با حروف عربی دارند، نویسههای جداگانه درنظر گرفتهشدهاست. یعنی کلیه حروف خاص فارسی (پ، چ، ژ، گ) و نیز «ک» و «ی» فارسی کهبا حرف مشابهدر عربیتفاوت نمایشی دارند، مکانجداگانهای بهخود اختصاص دادهاند. کلیه اعرابهای متداول حضور دارند و میان شکلفارسی/اردو و عربی ارقام نیز بهعلت شکل و رفتار متفاوت، تفاوتهایی منظور گشتهاست.
از طرف دیگر، علائم نقطهگذاری چون نقطه و فاصله کهشکلی کسانیدر خطهای لاتین و عربی دارند، کد یکسان دارند. علائمیچون پرانتز نیز، بسته به جهت متن، آینهای میشوند، به طور مثال، نویسه 0028 نماینده «پرانتز باز» است، و نه«پرانتز سمتچپ». یونیکد اتصالمجازی و فاصله مجازی را نیز تحتنامهای «اتصال با عرضصفر» و «بیاتصالی با عرضصفر» بهرسمیت میشناسد.
بدن ترتیب ملاحظه میشود که برای حل مشکلات موجود، و نیز رفتن به سوی یک استاندارد مقبول و همهجانبه، استاندارد یونیکد، روشی مناسب به نظر میرسد. در شمارههای آتی ماهنامه نیز به این موضوع از جنبههای دیگر خواهیم پرداخت.
اصطلاحات:
نویسه: در مقابل character. کوچکترین واحد متن. مثلاً یک حرف لاتین، یک اعراب فارسی، یکی علامت نقطهگذاری، یک نشانه بریل، یا یک نماد ریاضی
شکل: در مقابل glyph. کوچکترین واحد نمایش متن. برای بعضی نویسهها مثل حروف فارسی و هندی ممکن است چند شکل موجود باشد. مثلاً « ﺑ » و « ﻊ » از اشکالنمایشی محسوب میشوند
مجموعهنویسه: در مقابلcharacter set. مجموعهای از نویسهها کهبههر نویسه عددی اختصاصمیدهد که نماینده آن نویسه محسوب میشود و در تبادل اطلاعات مورد استفادهقرار میگیرد
مجموعه کد: در مقابل codepage. سیستمی که بههر نویسه دنباله مشخصیاز بایتها را متناظر میکند. مجموعهنویسهها میتوانند بهشکل یا چند مجموعهکد قابل استفادهباشند.
منابع:
مرکز محاسبات دانشگاه صنعتی شریف http://www.sharif.ac.ir/
سازمان مدیریت و برنامهریزی کشور
شورای عالی انفورماتیک http://www.unicode.org/
کوچیک ::: جمعه 86/6/30::: ساعت 1:34 صبح
نظرات دیگران: نظر
یونیکد به همهی نویسهها اعداد یکتایی اختصاص میدهد،. مستقل از محیط،. مستقل از برنامه،. مستقل از زبان. یونیکد چیست؟
ویندوز ۲۰۰۰ و ویندوز NT نسخهى ۴ کاملاً از یونیکد پشتیبانی میکنند.
متون یونیکد را میتوان بین اکثر برنامه های کاربردی نقل و انتقال داد.
ویندوزهاى نسخهى ۹۵، ۹۸، و ME در هسته مبتنى بر یونیکد نیستند، ولى با نصب بسیارى از برنامههاى مایکروسافت از قبیل Internet Explorer 5 و Office 2000 مىآید، مرورگرهای وب مىتوانند با استفاده از توابع این کتابخانه، یونیکد را نمایش دهند.
روى هر یک از محیطهای گرافیکی لینکس (X)، یعنى Gnome و KDE، پشتیبانى خوبى براى یونىکد وجود دارد که از طریق کتابخانههایى چون پنگو (Pango) و GTK+ صورت مىگیرد.
پنگو در لینکس توابع بسیار پیشرفتهاى در پشتیبانى از خطوط دشوار دارد و در حال حاضر نمایش آن نسبت به ویندوز مشکلات کمترى دارد.
مرورگر IE در نسخهى ۵ و بعد از آن، پشتیبانى خوبى از یونیکددارد. هر چند در مورد فارسى یک ایراد عمده دارد: این مرورگر حرف «ى» فارسى را با اشکال نشان مىدهد، بدین معنى که شکلهاى «اول» و «وسط» آن را به شکل «تنها» نمایش مىدهد. این مشکل در واقع اشکال قلمهایى است که بههمراه این مرورگر عر ضه مىشوند.
مرورگر Netscape نسخهى ۴ اگرچه نمایش یونىکد را در حداقل پشتیبانى مىکند، اما در نمایش متون چندزبانه در یک صفحه مشکل دارد. این مشکل پس از بازنویسى موتور این شبکهنورد در نسخهى ۶ و بنا کردن آن بر یونىکد حل شد، منتها بهعلت کامل نشدن پشتیبانى زبانهاى راستبهچپ، نسخهى ۰. ۶ این شبکهنورد بدون پ شتیبانى عربى و عبرى توزیع شد. در حال حاضر فعالیت روى این خطها ادامه دارد.
ویندوز ۲۰۰۰ و ویندوز NT نسخهى ۴ کاملاً از یونیکد پشتیبانی میکنند.
متون یونیکد را میتوان بین اکثر برنامه های کاربردی نقل و انتقال داد.
ویندوزهاى نسخهى ۹۵، ۹۸، و ME در هسته مبتنى بر یونیکد نیستند، ولى با نصب بسیارى از برنامههاى مایکروسافت از قبیل Internet Explorer 5 و Office 2000 مىآید، مرورگرهای وب مىتوانند با استفاده از توابع این کتابخانه، یونیکد را نمایش دهند.
روى هر یک از محیطهای گرافیکی لینکس (X)، یعنى Gnome و KDE، پشتیبانى خوبى براى یونىکد وجود دارد که از طریق کتابخانههایى چون پنگو (Pango) و GTK+ صورت مىگیرد.
پنگو در لینکس توابع بسیار پیشرفتهاى در پشتیبانى از خطوط دشوار دارد و در حال حاضر نمایش آن نسبت به ویندوز مشکلات کمترى دارد.
مرورگر IE در نسخهى ۵ و بعد از آن، پشتیبانى خوبى از یونیکددارد. هر چند در مورد فارسى یک ایراد عمده دارد: این مرورگر حرف «ى» فارسى را با اشکال نشان مىدهد، بدین معنى که شکلهاى «اول» و «وسط» آن را به شکل «تنها» نمایش مىدهد. این مشکل در واقع اشکال قلمهایى است که بههمراه این مرورگر عر ضه مىشوند.
مرورگر Netscape نسخهى ۴ اگرچه نمایش یونىکد را در حداقل پشتیبانى مىکند، اما در نمایش متون چندزبانه در یک صفحه مشکل دارد. این مشکل پس از بازنویسى موتور این شبکهنورد در نسخهى ۶ و بنا کردن آن بر یونىکد حل شد، منتها بهعلت کامل نشدن پشتیبانى زبانهاى راستبهچپ، نسخهى ۰. ۶ این شبکهنورد بدون پ شتیبانى عربى و عبرى توزیع شد. در حال حاضر فعالیت روى این خطها ادامه دارد.
کوچیک ::: جمعه 86/6/30::: ساعت 1:31 صبح
نظرات دیگران: نظر
لیست کل یادداشت های این وبلاگ
>> بازدیدهای وبلاگ <<
بازدید امروز: 4
بازدید دیروز: 19
کل بازدید :31925
بازدید دیروز: 19
کل بازدید :31925
>>اوقات شرعی <<
>> درباره خودم <<
>>لوگوی وبلاگ من<<
>>آرشیو شده ها<<
>>جستجو در وبلاگ<<
جستجو:
>>اشتراک در خبرنامه<<
>>تبلیغات<<