اصول و الگوریتم های رمزنگاری در php
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 6 دقیقه

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

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

در دنیای IT و ICT نیز همان گونه است.اطلاعات در دنیای مدرن امروزی به صورت دیجیتالی در رایانه ها ذخیره میشند و در سطح بالاتر برخی اطلاعات نیاز به ذخیره سازی در سرور و فضای اینترنت را دارند که به مراتب از دسسته ی اول محافظت از اطلاعات آنها سخت تر و پیچیده تر است.

امروزه باتوجه به فراگیری اینترنت و قرار گیری اطلاعات سازمان ها و شرکت های کوچک و بزرگ برروی بانک های اطلاعاتی سایت و پرتال های  خود و دسترسی به اطلاعات به صورت طبقه بندی شده باتوجه به سطح و ... محافظت از آنها بسیار حائز اهمیت بوده تا حدی که در سازمانهای متوسط و بزرگ بخشی به نام امنیت اطلاعات تشکیل شده است.

به دلیل محبوبیت زبان برنامه نویسی php  بسیاری از سایت ها و پرتال های بزرگ و کوچک با این زبان نوشته و ایجاد شده اند و ما قصد داریم که شیوه ها و اصول رمزنگاری در زبان محبوب برنامه نویسی php  را در این مقاله شرح و آموزش دهیم.

همان طور که میدانید برای ذخیره اطلاعات به صورت طبقه ای و منسجم در سطح وسیع از پایگاه داده استفاده میکنند پس لازم است که از پایگاه داده (دیتابیس) که محل ذخیره اطلاعات است ونیز اطلاعات داخل پایگاه داده  محافظت نماییم. یعنی اطلاعات را هنگام ذخیره کردن و انتقال و... رمزنگاری کنیم . اما چگونه؟

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

هش و رمزنگاری اطلاعات

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

تابع های معروف هش

تابع md5

 ابتدایی ترین تابع هش میباشد. این تابع به تنهایی امن نمیباشد زیرا در این زمان بسیاری از دیتابیس های بزرگی از این هش تو اینترنت وجود دارد و بادادن هش راحت عبارت اصلی پیدا میشود. به مثال زیر توجه کنید:

$hash=md5($user); 

//(salt)استفاده از کلمه ی اضافی

$hash=md5($user. $salt);

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

توجه کنید که که متغیر ها هرچیزی میتوانند باشند هش فقط نام روش است.

با اینکه به این نتیجه رسیدیم که تابع md5 از امنیت بالایی برخوردار نمیباشد اما نگران نباشید چون php  در نسخه ی 5 به بالا از تابع های crypt و password_hash  پشتیبانی میکند که مراتب از تابع md5 از امنیت بیشتری برخوردارند.

تابع crypt

این تابع از تابع md5 از امنیت بالاتری برخوردار است و خود تابع کلمه ی اضافی (salt) رندوم را اضافه میکند.توجه کنید که این تابع در نسخه های 5 به بعد php  میتوان به صورت 2 پارامتری نوشت و salt  به عنوان پارامتر دوم قرار گیرد.

// تعريف رمز عبور
$password = "pasword";

// تعريف نمک
$salt = "salt";

// رمزگذاري کلمه عبور با تابع
$cli = crypt($password, $salt);
echo $cli;

ویا به صورت زیر که از شرط if نیز استفاده شده است.

//هش کردن

$hash_pas = crypt($pas);

//تشخصی پسوردی که کاربر وارد کرده است.

if(hash_equals($hash_pas, crypt($pas, $hash_pas))){

echo 'password verify';

}

دقت کنید فقط دز نسخه های php 5 به بالا تابع crypt میتواند دو متغیر را بپذیرد و در نسخه های پایین تر salt  را نمیتوانیم به عنوان متغیر دوم تابع در نظر بگیریم.

تابع password_hash

//تولید هش

$hash=password_hash($pas, PASSWORD_DEFAULT);

//تشخیص هش 

if(password_verify($inputuser,$hash)){

echo 'Password is valid!';

} else {

echo 'Invalid password.';

}

کد بالا به این صورت است که ابتدا مقدار داده شده توسط تابع password_hash هش میشود و توسط دستور شرطی if  درستی کمه ی عبور وارد شده بررسی میشود.

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

هش قابل بازگشت نیست یعنی اگر اطلاعات و داده های شما نیاز به بازیابی ندارند میتوانید برای افزایش امنیت اطلاعات از هش و قواعد رمزنگاری در چهارچوب هش استفاده نمایید.

برای استفاده از الگوریتم رمزنگاری میتوانید از تابع هایی ابتدایی مانند base64_encode و نیز در سطح بالاتر از تابع mcrypt_decrypt استفاده نمایید که در ادامه توضیح خواهیم داد.

تابع base64_decode 

یکی از ساده ترین تابع هایی است که برای رمز نگاری استفاده میشود که با تابع base64_encode قابل بازگشت است.


 $str = 'This is an encoded string';

 echo base64_encode($str);

ومقدار بازگشتی آن به صورت زیر است:

 $str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';

 echo base64_decode($str);

توجه کنید که رای کدگشایی اطلاعات(اطلاعاتی که قبلا کدگذاری شده‌اند) از تابع base64_decode استفاده می‌کنیم.در واقع تابع بالا مقدار بازگشتی تابع base64_decode  می باشد.

تابع mcrypt_encrypt

 یکی از بهترین توابع رمزنگاری در php است که از الگوریتم MCRYPT_BLOWFISH بهرو می برد که یکی از بهترین الگوریتم های رمزنگاری محسوب می شود ، به این صورت که یک رشته را بر اساس کلیدی که برای آن تعریف میکنیم ، رمز و سپس توس تابع بازگشت آن یعنی mcrypt_decrypt بازگشایی میکند.

$string = mcrypt_encrypt (// string $cipher,// string $key,// string $data,// string $mode,// [string $iv]); 
// shows the result in base64 and decrypted 
$base64 = base64_encode($string); 
$decrypted = mcrypt_decrypt($cipher, $key, $string, $mode, $iv);

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
5 از 2 رای

/@roocketir

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

دیدگاه و پرسش

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

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید