تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

    مقدمه‌ای بر الگوریتم رمزنگاری 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، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

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

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