مقدمهای بر الگوریتم رمزنگاری Base64
۲۰ بهمن ۱۳۹۹
احتمالا متوجه هستید که هر لحظه حجم عظیمی از دادهها در شبکههایی مانند رسانههای اجتماعی بین انسانها منتقل میشود و این دادهها میتوانند هر نوع فرمت دادهای را اعم از BLOB و CLOB شامل شوند. این دادهها برای انتقال در شبکه به packetهایی تبدیل میشوند که در خود دادههای باینری را جای دادهاند.
BLOB و CLOB به چه معناست؟
BLOB بهمعنای Binary Large Object File است و دادههایی مانند تصویر، صدا یا فیلم در انتقال توسط شبکه به دادههای BLOB معروف هستند. CLOB بهمعنای Character Large Object File است و دادههایی مانند text یا xml یا هر نوع فرمت کاراکتری دیگر از نوع دادههای CLOB محسوب میشود.
الگوریتم رمزنگاری Base64 چیست؟
Base64 یک الگوریتم رمزنگاری binary به text است و به کمک آن میتوانیم دادهها را در شبکه انتقال دهیم. همچنین تفاوتی نمیکند که چه دادهای را میخواهید رمزنگاری کنید زیرا با Base64 هر نوع دادهای به یک رشته طولانی از متن تبدیل میشود.
قبلا نمیتوانستیم دادههایی مانند فایلها را از طریق شبکه انتقال دهیم زیرا معماری این دادهها ۸ بیتی بود در صورتی که شبکه با معماری ۷ بیتی ساخته شده بود اما با رمزنگاری Base64 این مشکل نیز رفع شده است.
Base64 از دادههای ۶ بیتی که ۶۴ کاراکتر را شامل میشوند و قابلیت خوانایی بالایی دارند، استفاده میکند:
- ۱۰ مقدار عددی از ۰ تا ۹
- ۲۶ حروف بزرگ از A تا Z
- ۲۶ حروف کوچک از a تا z
- ۲ کاراکتر خاص بستگی به سیستمعامل شما
Base64 چگونه کار میکند؟
بیایید با یک مثال شروع کنیم تا بتوانید این الگوریتم رمزنگاری را بهتر درک کنید.
در تصویر بالا رشتهی THS
را با Base64، رمزنگاری کردهایم و خروجی برابر با VEhTCg==
است. حال شاید برایتان سوال شده باشد که مراحل این الگوریتم رمزنگاری چگونه است؟
در ابتدا تعداد کاراکترهای رشتهی ورودی ما شمارش میشود. اگر تعداد کاراکترهای رشتهی ورودی مضربی از عدد ۳ نبود کاراکتر =
بهمنظور padding در مراحل بعدی به انتهای رشتهی رمزنگاری شده اضافه میشود. سپس کاراکترهای ورودی به کدهای ASCII تبدیل شده و در مرحلهی بعد کدهای ASCII بهدست آمده به باینریهای ۸ بیتی تبدیل خواهند شد. همانطور که قبلتر گفتیم معماری رمزنگاری Base64 بهصورت ۶ بیتی است پس بایستی باینریهای ۸ بیتی بهصورت باینریهای ۶ بیتی جداسازی شوند و در مرحلهی آخر مقادیر Decimal باینریهای ۶ بیتی محاسبه شده و با استفاده از این جدول، مقادیر Decimal به رشتهی خروجی که همان رشتهی رمزنگاری شده است تبدیل میشود.
بیایید با دنبال کردن مراحل فوق رشتهی THS
را بهصورت دستی رمزنگاری کنیم. THS
از ۳ کاراکتر تشکیل شده است بنابراین نیازی به padding ندارد و در مرحله باید رشتهی ورودی را به کدهای ASCII تبدیل کنیم:
در مرحلهی بعد کدهای ASCII بهدست آمده را به فرمت باینری ۸ بیتی تبدیل خواهیم کرد:
باینریهای ۸ بیتی بایستی بهصورت ۶ بیتی از هم جداسازی شده و مقدار Decimal آنها محاسبه شود:
درنهایت برای بهدست آوردن نتیجهی پایانی رمزنگاری از این جدول استفاده خواهیم کرد:
خروجی رمزنگاری شدهی ما VEhT
خواهد بود. اما شاید برایتان سوال شده باشد که چرا خروجی بهدست آمده در تصویر مقدار VEhTCg==
بوده است؟
ما پس از وارد کردن دستور base64 <<< THS
دکمهی Enter را فشردهایم و Base64 آن را یک خط جدید حساب کرده است. برای ثابت کردن این موضوع به عکس زیر دقت کنید:
با اجرای دستور echo -n THS | base64
همان خروجی که در بخش قبلی حساب کرده بودیم را دریافت خواهیم کرد.
اگر تعداد کاراکترهای رشتهی ورودی ما مضربی از عدد ۳ نباشد چه اتفاقی میافتد؟
طبق اولین مرحلهی رمزنگاری Base64 اگر تعداد کاراکترهای رشتهی ورودی مضربی از عدد ۳ نباشد، paddingهایی با استفاده از کاراکتر =
ایجاد میشود. بیایید با یک مثال این موضوع را بهتر درک کنیم. فرض کنید که میخواهیم abraAbra
را رمزنگاری کنیم:
در این مثال تعداد کاراکترهای رشتهی ورودی ما مضربی از عدد ۳ نیست و باید یک کاراکتر =
در انتهای آن اضافه شود تا تعداد کاراکترها مضربی از عدد ۳ باشد. اما قبلا از اضافه کردن padding بایستی مقادیر ASCII را به باینریهای ۸ بیتی تبدیل کرده:
و سپس باینریهای ۸ بیتی بهصورت ۶ بیتی از هم جدا شوند. همچنین میتوانید padding را در این مرحله به انتهای رشته اضافه کرد. فراموش نکنید که مقادیر Decimal باینریهای ۶ بیتی را حساب کنید:
حال با در دست داشتن مقادیر Decimal میتوان با استفاده از این جدول خروجی نهایی رمزنگاری شده را محاسبه کرد:
خروجی نهایی ما مقدار YWjyYUFicmE=
بوده که احتمالا شما هم به نتیجهی یکسانی رسیده باشید.
منبع: https://levelup.gitconnected.com/what-is-base64-encoding-4b5ed1eb58a4
توسعهدهندگان دربارهی ما چه میگویند
تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...
MohammadReza
keikaavousi
بعد از بسته شدن @fandoghpaas و ناراحتی همهمون از اینکه یه سرویس خوب و صادق نمیتونه از پس هزینهها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوتهایی داشت که کمی کار میخواست ولی تا الان کاملا راضی.
jadi
jadi
یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.
Arch
EbadiDev
واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیتهای سرویس دیتابیسشون اینه که خودشون به صورت دورهای بکآپ میگیرن.
...
Ali Najafi
me_ali_najafi
یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@
Navid
1navid
عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم
Amir H Shekari
vanenshi