مقدمه‌ای بر الگوریتم رمزنگاری Base64


۲۰ بهمن ۱۳۹۹
مقدمه‌ای بر الگوریتم رمزنگاری base64

احتمالا متوجه هستید که هر لحظه حجم عظیمی از داده‌ها در شبکه‌هایی مانند رسانه‌های اجتماعی بین انسان‌ها منتقل می‌شود و این داده‌ها می‌توانند هر نوع فرمت‌ داده‌ای را اعم از BLOB و CLOB شامل شوند. این داده‌ها برای انتقال در شبکه به packetهایی تبدیل می‌شوند که در خود داده‌های باینری را جای داده‌‌اند.

انتقال 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 چگونه کار می‌کند؟

بیایید با یک مثال شروع کنیم تا بتوانید این الگوریتم رمزنگاری را بهتر درک کنید.

رمزنگاری base64 رشته‌ی ths

در تصویر بالا رشته‌ی THS را با Base64، رمزنگاری کرده‌ایم و خروجی برابر با VEhTCg== است. حال شاید برایتان سوال شده باشد که مراحل این الگوریتم رمزنگاری چگونه است؟

در ابتدا تعداد کاراکترهای رشته‌ی ورودی ما شمارش می‌شود. اگر تعداد کاراکترهای رشته‌ی ورودی مضربی از عدد ۳ نبود کاراکتر = به‌منظور padding در مراحل بعدی به انتهای رشته‌ی رمزنگاری شده اضافه می‌شود. سپس کاراکترهای ورودی به کدهای ASCII تبدیل شده و در مرحله‌ی بعد کدهای ASCII به‌دست آمده به باینری‌های ۸ بیتی تبدیل خواهند شد. همان‌طور که قبل‌تر گفتیم معماری رمزنگاری Base64 به‌صورت ۶ بیتی است پس بایستی باینری‌های ۸ بیتی به‌صورت باینری‌‌های ۶ بیتی جداسازی شوند و در مرحله‌ی آخر مقادیر Decimal باینری‌های ۶ بیتی محاسبه شده و با استفاده از این جدول، مقادیر Decimal به رشته‌ی خروجی که همان رشته‌ی رمزنگاری شده است تبدیل می‌شود.

بیایید با دنبال کردن مراحل فوق رشته‌ی THS را به‌صورت دستی رمزنگاری کنیم. THS از ۳ کاراکتر تشکیل شده است بنابراین نیازی به padding ندارد و در مرحله باید رشته‌ی ورودی را به کدهای ASCII تبدیل کنیم:

تبدیل رشته‌ی ths به کدهای ascii

در مرحله‌ی بعد کدهای ASCII به‌دست آمده را به فرمت باینری ۸ بیتی تبدیل خواهیم کرد:

تبدیل کدهای ascii به باینری‌های ۸ بیتی

باینری‌های ۸ بیتی بایستی به‌صورت ۶ بیتی از هم جداسازی شده و مقدار Decimal آن‌ها محاسبه شود:

تبدیل باینری‌های ۸ بیتی به باینری‌های ۶ بیتی و به‌دست آوردن مقادیر demcimal آن‌ها

درنهایت برای به‌دست آوردن نتیجه‌ی پایانی رمزنگاری از این جدول استفاده خواهیم کرد:

به‌دست آوردن مقدار دقیق اعداد decimal با استفاده از base64 index table

خروجی رمزنگاری شده‌ی ما VEhT خواهد بود. اما شاید برایتان سوال شده باشد که چرا خروجی به‌دست آمده در تصویر مقدار VEhTCg== بوده است؟

ما پس از وارد کردن دستور base64 <<< THS دکمه‌ی Enter را فشرده‌ایم و Base64 آن را یک خط جدید حساب کرده است. برای ثابت کردن این موضوع به عکس زیر دقت کنید:

رمزنگاری base64 رشته‌ی ths

با اجرای دستور echo -n THS | base64 همان خروجی که در بخش قبلی حساب کرده بودیم را دریافت خواهیم کرد.

اگر تعداد کاراکترهای رشته‌ی ورودی ما مضربی از عدد ۳ نباشد چه اتفاقی می‌افتد؟

طبق اولین مرحله‌ی رمزنگاری Base64 اگر تعداد کاراکترهای رشته‌ی ورودی مضربی از عدد ۳ نباشد، paddingهایی با استفاده از کاراکتر = ایجاد می‌شود. بیایید با یک مثال این موضوع را بهتر درک کنیم. فرض کنید که می‌خواهیم abraAbra را رمزنگاری کنیم:

تبدیل رشته‌ی abraabra به کدهای ascii

در این مثال تعداد کاراکترهای رشته‌ی ورودی ما مضربی از عدد ۳ نیست و باید یک کاراکتر = در انتهای آن اضافه شود تا تعداد کاراکترها مضربی از عدد ۳ باشد. اما قبلا از اضافه کردن padding بایستی مقادیر ASCII را به باینری‌های ۸ بیتی تبدیل کرده:

تبدیل کدهای ascii به باینری‌های ۸ بیتی

و سپس باینری‌های ۸ بیتی به‌صورت ۶ بیتی از هم جدا شوند. همچنین می‌توانید padding را در این مرحله به انتهای رشته اضافه کرد. فراموش نکنید که مقادیر Decimal باینری‌های ۶ بیتی را حساب کنید:

تبدیل باینری‌های ۸ بیتی به باینری‌های ۶ بیتی و به‌دست آوردن مقادیر demcimal آن‌ها

حال با در دست داشتن مقادیر Decimal می‌توان با استفاده از این جدول خروجی نهایی رمزنگاری شده را محاسبه کرد:

به‌دست آوردن مقدار دقیق اعداد decimal با استفاده از base64 index table

خروجی نهایی ما مقدار YWjyYUFicmE= بوده که احتمالا شما هم به نتیجه‌ی یکسانی رسیده باشید.

منبع: https://levelup.gitconnected.com/what-is-base64-encoding-4b5ed1eb58a4

برچسب‌ها:

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید و فقط برای بیش از آن هزینه پرداخت کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

توسعه‌دهندگان درباره‌ی ما چه می‌گویند

تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...

MohammadReza
liara testimonial
keikaavousi

بعد از بسته شدن @fandoghpaas و ناراحتی همه‌مون از اینکه یه سرویس خوب و صادق نمی‌تونه از پس هزینه‌ها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوت‌هایی داشت که کمی کار می‌خواست ولی تا الان کاملا راضی.

jadi
liara testimonial
jadi

یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.

Arch
liara testimonial
EbadiDev

واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیت‌های سرویس دیتابیس‌شون اینه که خودشون به صورت دوره‌ای بکآپ میگیرن.
...

Ali Najafi
liara testimonial
me_ali_najafi

یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@

Navid
liara testimonial
1navid

عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم

Amir H Shekari
liara testimonial
vanenshi

همراه شما هستیم

در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
تلفن واحد فروش:
۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)