امیر حسین ملک زاده
امیر حسین ملک زاده
خواندن ۳ دقیقه·۳ سال پیش

انواع توابع Encoding و Decoding سورس های php

Open-Source VS Closed-Source
Open-Source VS Closed-Source


از وقتی که دنیای وب شناخته تر شد و افراد زیادی به سمت برنامه نویسی تحت وب روانه شدن، جنگ بین برنامه نویس ها هم شروع شد. اگر بخوام این جنگ رو به دو جبهه تقسیم کنم، باید بگم که:

  • یک طرف جبهه برنامه نویس هایی هستن که کلی وقت و انرژی و زندگیشون رو برای نوشتن یک سورس میزارن و دوست ندارند که حقشون ضایع بشه و برای همین به دنبال راهی هستند که سورسشون رو کدگذاری یا به اصطلاح Encode کنند تا بقیه افراد نتونن زحماتشون رو هدر بدن یا حتی سرقت کنن !
  • اما اونطرف جبهه برنامه نویس هایی هستن که همواره دنبال هدر دادن زحمات برنامه نویس های دیگر هستند و همیشه یک راهی برای کدگشایی یا به اصطلاح Decode سورس های کدگذاری شده پیدا میکنن که متاسفانه این امر اجتناب ناپذیره !

چگونه کدگذاری(Encode) کنیم که قابل کدگشایی(Decode) نباشه؟

سوالی که پیش میاد اینه که اصلا روشی وجود داره که بتونه سورس ما رو 100 درصد ایمن کنه و هیچکس نتونه سورس مارو بخونه یا دیکد کنه؟ جواب این سوال خیلی پیچیدس! حالا چرا؟
چون برای کدگذاری یا انکد کردن سورس ، بی نهایت روش عمومی و خصوصی وجود داره که هر روش از الگوریتم های خاص خودش پیروی میکنه ولی در نهایت سورس توسط وب سرور خونده میشه و از حالت محافظت شده خارج میشه که این مسئله باعث میشه که حتی قوی ترین Encoder ها هم قابل کدگشایی باشن.
چیزی که در بحث کدگذاری مهمه، پیچیدگی الگوریتم و پروسه ی انکد هستش که زمان دیکد شدن رو به تعویق میندازه.

برای درک بهتر این موضوع بیاید با چند روش کدگذاری آشنا بشیم:

کدگذاری با تابع str_rot13

طبق توضیحات سایت php این تابع، یک تابع ساده است که هر مقداری که در حروف الفبا باشد را به 13امین حرف بعدی الفبای انگلیسی تبدیل می کند.(این تابع فقط روی حروف تاثیر دارد و روی اعداد و کاراکترهای خاص عملی انجام نمی دهد)

برای مثال -> کد زیر تمامی حروف را به 13 حرف بعدی تبدیل می کند و با عدد 22 کاری ندارد.

<?php echo str_rot13('Amir Malek 22'); ?>

خروجی ->

Nzve Znyrx 22


حالا چطور میتونیم این مقدار رو دیکد کنیم؟ برای دیکد کردن این مقدار فقط کافیه که دوباره از تابع str_rot13 استفاده کنیم. به صورت زیر:

<?php echo str_rot13('Nzve Znyrx 22'); ?>

کدگذاری و کدگشایی با توابع base64_encode و base64_decode

طبق توضیحات سایت php با استفاده از این تابع میتونیم کد های خودمون رو با BASE64 انکد کنیم.
اما شیوه ی کدگذاری Base64 به چه شکلی است؟
کلمه ی amir را در نظر بگیرید که متشکل از 4 حرف می باشد. هر حرف یک نمایش باینری 8 بیتی دارد. که در تصویر زیر میتونید ببینید.

نمایش باینری کلامه ی amir
نمایش باینری کلامه ی amir

در اینجا باید تمام اعداد 8 بیتی رو کنار هم گذاشته و آنها را به گروه های 6 تایی تقسیم کنیم که اعداد بالا به شکل زیر در می آیند.

تبدیل به گروه های شش تایی
تبدیل به گروه های شش تایی

توجه: اگر عدد برای گروه های شش تایی کم بیاد و گروه آخر تکمیل نشه، باید به تعداد اعدادی که کم اومده صفر اضافه کنیم.

حالا تمام گروه های 6 تایی باینری رو تبدیل به مبنای 10 (دسیمال) میکنیم. طبق شکل زیر:

تبدیل باینری به دسیمال
تبدیل باینری به دسیمال

حالا باید این اعداد رو طبق جدول Base64 ترجمه کنیم و به عبارت کدگذاری شده ی کلمه ی amir برسیم.

جدول Base64
جدول Base64

بعد از تبدیل اعداد به عبارت YW1pcg میرسیم که معادل انکد شده ی کلمه ی amir می باشد.

استفاده از تابع base64 در کد های php

کدگذاری (encode) یک رشته:

<?php echo base64_encode('amir'); ?>

کدگشایی (decode) یک رشته:

<?php echo base64_decode('YW1pcg'); ?>

تعداد زیادی از این توابع از پیش تعریف شده برای محافظت و ناخوانا کردن سورس های php وجود دارد که در اینجا دوتا از آنها را معرفی کردیم. اگر توابع دیگری میشناسید در بخش کامنت ها معرفی کنید.

موفق باشد :)


انکد phpدیکد phpstr rot13base64کدگذاری و کدگشایی سورس های php
شاید از این پست‌ها خوشتان بیاید