شماره تماس : 09014413449

    ...

  • ...

  • ...

  • ...

ثبت نام / ورود

رمزنگاری در php

mba
26 مرداد 1401
دسته بندی php

رمزنگاری PHP چیزی نیست جز دستیابی به کد رمزگذاری با کمک برخی الگوریتم‌ها که گاهی اوقات الگوریتم‌های هش نامیده می‌شوند و معمولاً با گرفتن یک رشته یا ورودی دیگر کار می‌کنند و سپس به ایجاد یک کد منحصر به فرد از رشته/دیگر کمک می‌کند. رمزگذاری شامل تغییر متن یا سایر متن های خاص به متن کد متفاوت یا متن دیگر است تا داده ها بدون هیچ گونه قرار گرفتن در معرض بیشتر افراد به جز برای برخی که دسترسی دارند، ایمن شوند. انواع مختلف روش های رمزنگاری PHP را در زیر بررسی کنید.

انواع رمزنگاری  پی اچ پی

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

1. هش کردن

الگوریتم هشینگ زبان برنامه نویسی PHP معمولاً یک مقدار ورودی می گیرد و سپس آن را به یک خلاصه پیام تبدیل می کند. به طور خلاصه، مقادیر متن ساده به طول های ثابت هش تبدیل می شوند و فقط با دور زدن یک مقدار اصلی به الگوریتم هش منحصر به فرد می توان آن را تأیید کرد. این هش را برای ذخیره تمام رمزهای عبور کاربر عالی می کند.

 

فقط شایان ذکر است که هش به هیچ وجه راه حلی ضد گلوله برای پرس و جو ما نیست، اما برخی از آنها همه الگوریتم های هش را که برابر هستند، ندارند. ما الگوریتم‌های MD5 و SHA1 را در نظر گرفته‌ایم که کارآمد و سریع هستند، و سپس همه این موارد را برای تأیید فایل و جمع‌بندی بررسی ایده‌آل می‌کنیم. سرعت آنها باعث می شود که اکثر آنها برای هش رمز عبور کاربر نامناسب باشند. با قدرت محاسبات پردازنده‌های گرافیکی مدرن، رمز عبور فقط به کمک نیروی بی‌رحم در چند دقیقه و تنها با فاش کردن رمز/رمزهای متن ساده اصلی و عمدا الگوریتم/الگوریتم‌های هش کندتر مانند bcrypt شکسته می‌شود. یا Argon2 استفاده خواهد شد.

 

هش کردن رمز عبوری که با یک الگوریتم تولید می‌شود، مطمئناً داده‌های واقعی و اصلی را پنهان می‌کند و سپس سرعت مهاجم را کاهش می‌دهد، در حالی که توسعه‌دهندگان باید قوی‌ترین الگوریتم موجود را امتحان کنند. زبان PHP دارای یک دستور پایه است که عبارت است از password_hash().

این مثال استفاده از تکنیک هش «bcrypt» است.


 10,
'salt1' => '$P27r06o9!nasda57b2M22'
];
echo sprintf("The Result of crypt() function on %s is %s\n",
$str1, crypt($str1, $options1['salt1']));
echo "
";
echo sprintf("The Result of DEFAULT function on %s is %s\n",
$str1, password_hash($str1, PASSWORD_DEFAULT));
echo "
";
echo sprintf("The Result of BCRYPT function on %s is %s\n", $str1,
password_hash($str1, PASSWORD_BCRYPT, $options1));
echo "
";
?>

 

خروجی

The Result of crypt() function on Password is *0
The Result of DEFAULT function on Password is $2y$10$sjQ6hmRf1Mj3vGyl6jY/6ezACSTCAniFh4w2RQxRp0EfjgBBLml5a
The Result of BCRYPT function on Password is $2y$10$zSPACShXZV3zfnFlQunxVOjgfVQJvX2RDzIfGW/xc9zGl7wVnTJJe

 

 

 

2. رمزگذاری کلید مخفی

رمزگذاری کلید مخفی PHP معمولاً از یک کلید واحد برای رمزگذاری و رمزگشایی داده ها استفاده می کند. به رمزگذاری متقارن نیز معروف است. برای این، اگر نسخه قدیمی زبان برنامه نویسی PHP را اجرا می کنید، سدیم زبان برنامه نویسی PHP را از طریق PECL نصب کنید.

 

در ابتدا، به کلید رمزگذاری نیاز دارید که در واقع فقط با استفاده از کد تابع random_bytes () ایجاد می شود. اما معمولاً باید فقط یک بار این کار را انجام دهید و آن را فقط به عنوان یک متغیر محیطی ذخیره کنید. این کلیدی است که ما باید آن را به عنوان یک راز نگه داریم. اگر کلید مخفی شناخته شده باشد، رمزگذاری شده نیز به خطر می افتد

$secret_key = random_bytes (SODIUM_CRYPTO_SECRETBOX_KEYBYTES);

 

 

به منظور رمزگذاری مقداری که قرار است به تابع sodium_crypto_secretbox() با key/secret key و $nonce رمزگذاری شود. سپس متغیر nonce با استفاده از تابع random_bytes() تولید می‌شود و این فقط به این دلیل است که هرگز نمی‌توان از همان nonce/nonce مشابه استفاده کرد.


$nonce = random_bytes(SODIUM_CRYPTO_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox(‘This is secret key!!!’, $nonce, $secret_key);

 

 

 

این نشان دهنده مشکل است زیرا ما به آن nonce نیاز داریم که بعداً/بعد از آن مقدار را رمزگشایی می کند. اما NONCE/NONCES هیچ کلیدی برای مخفی نگه داشتن ندارد تا بتوانیم به راحتی آن را به عنوان $ciphertext اضافه کنیم و سپس تابع base64_encode() مقداری است که قبل از ذخیره آن در پایگاه داده واقعی اتفاق می افتد.


$encoded1 = base64_encode($nonce . $ciphertext);
Var_dump($encoded1);

 

نحو بالا فقط برای رمزگذاری مقدار است. برای رمزگشایی/رمزگشایی مقدار کدگذاری شده، از دستور زیر استفاده کنید.

 

$decoded1 = base64_decode($encoded1);

 

طول متغیر یا تابع nonce با استفاده از تابع mb_substr() درست قبل از رمزگشایی مقدار استخراج می شود.

 

این مثال اجرای تابع random_bytes() برای درک رمزگذاری کلید مخفی است. در اینجا طول رشته تصادفی با کمک هگز باینری تبدیل می شود تا بایت های تصادفی در یک رشته ایمن شوند.


$length1 = random_bytes('3');
var_dump(bin2hex($length1));
?>

 

خروجی

string(6) "0c1539"

 

3. رمزگذاری پاکت

 

 اگر کلید مخفی ما شناخته شود/در خطر میفته  و، داده های ما آسیب پذیر میشن. فقط در نظر بگیرید که یک کاربریا مهاجم  به نقطه سروری که در واقع میزبان برنامه دیگر ماست دسترسی پیدا کرده است. در این شرایط، مهاجم بیشتر اوقات کلید مخفی را که باید مخفی نگه داشته شود، بدست می‌آورد/کشف می‌کند. اگر کشف شود، ممکن است داده های ما در معرض خطر قرار گرفتن در معرض کاربر/مهاجم مخرب باشد

 

ما می توانیم از سرویس Cloud KMS استفاده کنیم که در واقع توسط سرویس مدیریت کلید ابری گوگل ارائه می شود. طیف گسترده ای از بسیاری از ویژگی های مفید را ارائه می دهد. این شامل چرخش خودکار کلید و همچنین قابلیت تخریب کلید با تاخیر است.

قبل از ارسال متن ساده به CLOUD KMS، هر بار که داده ها را در پایگاه داده می نویسیم، یک کلید رمزگذاری منحصر به فرد ایجاد کنید. این کلید DEK (کلید رمزگذاری داده ها) نام دارد که در واقع در رمزگذاری داده ها استفاده می شود. DEK که به Google Cloud KMS ارسال می شود رمزگذاری می شود و سپس KEK (کلید رمزگذاری کلید) را برمی گرداند. در نهایت، KEK در کنار هم در نقطه پایگاه داده واقعی که در کنار داده های رمزگذاری شده است ذخیره می شود و سپس DEK از بین می رود.

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


فرآیند رمزگذاری:

     DEK منحصر به فرد - کلید رمزگذاری داده را ایجاد می کند
     با استفاده از SKE (رمزگذاری کلید مخفی) داده ها رمزگذاری می شوند
     اکنون DEK – کلید رمزگذاری داده به منظور رمزگذاری به Cloud KMS ارسال می‌شود که در واقع کلید رمزگذاری کلید را برمی‌گرداند.
     سپس داده های رمزگذاری شده و KEK در کنار هم ذخیره می شوند
     سپس تخریب DEK انجام خواهد شد

فرآیند رمزگشایی:

     اکنون ابتدا از پایگاه داده رمزگذاری شده و KEK (Key Encrypted Key) بازیابی خواهد شد.
     سپس KEK را برای Cloud KMD برای رمزگشایی ارسال کنید که در واقع DEK - کلید رمزگذاری داده را برمی گرداند.
     اکنون از DEK – Data Encryption Key برای رمزگشایی داده های رمزگذاری شده استفاده می شود.
     اکنون DEK - کلید رمزگذاری داده ها از بین می رود.

 

 

 

سایت آیرملو,webrich,طراحی سایت فروشگاهی و اندروید,سورس برنامه نویسی,webd design,قالب سایت,رمزنگاری در برنامه نویسی, رمز گذاشتن داده های سایت

نظرات

برای ارسال نظر شما باید ابتدا وارد حساب کاربری خود شوید.