الگوریتم base64 در php

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

همان طور که در مقاله ی الگوریتم های رمز نگاری معروف در پی اچ پی گفته شد، یکی از الگوریتم های رمزنگاری در php الگوریتم base64 می باشد.

base64 نام تابعی از PHP است که کد های پروژه شما را رمزگذاری می کند. دو تابع base64_encode و base64_decode برای کد کردن کد های پروژه های وب مورد استفاده قرار می گیرد. این توابع در نسخه‌های ۴ به بالا زبان php وجود دارد و امکان استفاده از آنها در نسخه های قدیمی امکان پذیر نیست. همان‌ طور که از نام این توابع پیداست، تابع base64_encode برای کد کردن اطلاعات و تابع base64_decode  برای کدگشایی اطلاعات مورد استفاده قرار می گیرد.

نحوه ی کد گذاری اطلاعات: همان‌طور که در ابتدا نیز اشاره شد، برای کد کردن اطلاعات از تابع base64_encode استفاده می‌کنیم. اطلاعات کدشده توسط این تابع، نسبت به اطلاعات اصلی به میزان ۳۳ درصد فضای بیشتری برای ذخیره سازی نیاز دارند. این تابع به صورت زیر تعریف می‌شود:

string base64_encode( string $data );

همان طور که ملاحظه میکنید این تابع یک رشته را دریافت و در خروجی یک رشته کد گذاری شده را که در متغیر $data قرار دارد باز می گرداند.

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

حال بعد از کد گذاری نیاز است که در صورت لزوم به رشته ی اصلی با همان فرم دسترسی داشته باشیم.برای این منظور لازم است اطلاعات کدگذاری شده را بازگشایی کنیم.روش کد گشایی اطلاعات این تابع به صورت زیر است:

نحوه ی کدگشایی اطلاعات:

string base64_decode( string $data [, bool $strict = false ] );

با توجه به پارامتر های این تابع در می یابیم که باید اطلاعات کدگذاری شده را به عنوان پارامتر ورودی به این تابع بدهیم و در خروجی اطلاعات کدگشایی شده را دریافت کنیم. متغیر bool که در تعریف تابع به صورت پارامتر اختیاری قرار دارد، از نسخه ۵٫۲٫۰ زبان php به تعریف این تابع اضافه شده است. کاربرد این متغیر اختیاری به این صورت است که اگر به عنوان ورودی(همراه با اطلاعات کد شده)، متغیری از نوع bool نیز به تابع بدهیم و در اطلاعات کدشده کاراکتری خارج از محدوده الفبای base64 وجود داشته باشد، این متغیر پس از اجرای تابع مقدار false را بر میگرداند.

به مثال زیر توجه کنید:

 $str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';

 echo base64_decode($str);

ابتدا متغیری که در آن رشته ی کد گذاری شده بود را تعریف و سپس با استفاده از تابع base64_decode آنرا کد گشایی میکنیم:

This is an encoded string

که عبارت بالا در خروجی چاپ خواهد شد.

حال به یکی از کاربرد های این تابع میپردازیم:

یکی از کاربرد های تابع base64 ،ایحادعکس هایی هست که به صورت inline و به قولی از طریق کار با base64 ساخته میشوند.

تصاویر و برخی محتویات ارائه شده توسط CSS, JS, HTML را می‌توان به صورت آدرس آن درج کرد و مرورگر ها  پس از دریافت این کد، تصویر  و محتویات مربوطه را از آدرسی که تعریف شده است درخواست می‌کنند و در نتیجه تصویر و محتویات مربوط به آن آدرس اجرا میشوند. 

اما علاوه بر این کار(شما میتوانید برای کاهش درخواست از دیتای کد شده ی آن توسط تابع base64 استفاده نمایید)، می‌توانید به جای درج آدرس عکس، دیتای تشکیل دهنده آن عکس را ذکر کنید تا بدون درخواست اضافه(درخواست اضافی سرعت سرور در نتیجه سرعت بارگذاری وب و پورتال تان را کاهش میدهد)، تصویر نمایش داده شود که به این تکنیک Data URI و به این تصاویر Inline image گفته می‌شود . 

به عنوان مثال به کد زیر دقت کنید:

background: white url('data:image/gif;base64,R0lGODlhNAAQAKIHAIQKhNkPNzgQ2fbw97FksRTfFNas1v///yH5BAEAAAcALAAAAAA0ABAAAAPtCAoz8qLBeAZR5ujNuzdAxi2MA0nncS2i53Zgq5HoU0eD0gDE62+NQYdmshUFh5jm0jAMDM4KVPOUPZtQZ1C4rXSVSQaIqFOFOLHcouttUINhEXNMuPRABLxwk1bUA4ABDQWEBTc7BDtiPDMlJDJxahqBggOFhkdCK2tgTGGMMCE5PQeUg4WHFXZzZ2ZcGB+ioKaWqJlXmotyDJ+kaLKkW1xwwmGkCsaNirC/TqBs0MQYFxl0dsZ4qtXAk4ENtCuJZmufa2pCGKORs94DtDQaBnV7MVBcU1JOU7j4tO/kLsD8GFiq3b8yAVsR/JEAADs=') no-repeat scroll left top;

js:

window.open('data:text/html;charset=utf-8,%3C%21DOCTYPE%20' +

  'html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%3Chead%' +

  '3E%3Ctitle%3EEmbedded%20Window%3C%2Ftitle%3E%3C%2Fhead%' +

  '3E%0D%0A%3Cbody%3E%3Ch1%3E42%3C%2Fh1%3E%3C%2Fbody%3E%0A' +

  '%3C%2Fhtml%3E%0A%0D%0A','_blank','height=300,width=400');

شما با استفاده از تابع base64 می توانید درخواست های ارسالی به سرور را کاهش دهید.با این روش از بوجود آمدن پیام اخطار https جلوگیری کنید و بار سرور را سبک کنید به علاوه افزودن تصاویر با این روش به ایمیل‌ها، ساده‌تر از ضمیمه کردن آن به عنوان attach به نظر می‌رسد. ولی حجم این طور فایل ها چون خروجی تابع base64 محسوب میشود از فایل اصلی حدود 33 درصد بیشتر است.پس برای تصاویر و محتواهای کم حجم مفید واقع میشود ولی در مواقعی که تصویر بالای 1 مگ حجم دارد این عمل توصیه نمیشود.در ضمن تصاویری که به صورت inline در css درج شده باشند، به دلیل کش شدن css کش می‌شوند اما تصاویری که در سورس صفحه html در تگ IMG قرار داده شده باشند، با این روش کش نمی‌شوند.

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

لینکهای زیر ارائه دهنده ی سرویس آنلاین کدگذاری تصاویر بر مبنای base64 میباشد:

http://www.askapache.com/online-tools/base64-image-converter/

http://dataurl.net/#dataurlmaker

مقالات پیشنهادی

اصول و الگوریتم های رمزنگاری در php

در دنیا ، اطلاعات و اشیا گرانقدر مهم اند و نیاز به محافظت دارند.برای نگهداری از اشیا و اطلاعات مهم چه میکنید؟قطعا آنها در صندوق های اماناتی که با روش...

مفهوم و کاربرد Session در PHP

هنگامی که شما با یک نرم افزار در محیط ویندوز کار می کنید ، آن را باز کرده و تغییراتی درونش ایجاد نموده و سپس آن را می بندید . به این فرایند یک session...

آرایه ها و توابع مرتبط با آن در زبان php

آرایه متغیری است که می تواند چندین مقدار را در خود نگهداری نماید . این نوع متغیر تمامی موارد مورد نظر را درون خود با یک نام واحد نگهداری کرده . و به ه...

توابع اعتبار سنج زبان برنامه نویسی PHP

اعتبارسنجی داده های ورودی که کاربر یا برنامه در صفحات وب وارد می نمایند ، یکی از مهمترین مسائل در زمینه طراحی صفحات وب امن می باشد برای روشن شدن مسئله...