PHP crypt() 函数

定义和用法

crypt() 函数返回使用 DES、Blowfish 或 MD5 算法加密的字符串。

在不同的操作系统上,该函数的行为不同,某些操作系统支持一种以上的算法类型。在安装时,PHP 会检查什么算法可用以及使用什么算法。

具体的算法依赖于 salt 参数的格式和长度。通过增加由使用特定加密方法的特定字符串所生成的字符串数量,salt 可以使加密更安全。

这里有一些和 crypt() 函数一起使用的常量。这些常量值是在安装时由 PHP 设置的。

مقابلہ کی نمبرش:

[CRYPT_SALT_LENGTH] مقابلہ کی لگن کی طوالت کا مقدار دیز کی نمبرش پر مبنی ہے، جس میں 2 بائٹ کا استعمال کیا جاتا ہے۔
[CRYPT_STD_DES] اس کا نمبرش دیز الگوریتم پر مبنی ہے، جس میں "./0-9A-Za-z" کاراکتر میں دو کاراکتر استعمال کیا جاتا ہے۔ نمبرش میں غیر مجاز کاراکتر استعمال کرنا crypt() کی فشل شدگی کا باعث بن سکتا ہے۔
[CRYPT_EXT_DES] ترسیف کئیجی کا محضب دیز الگوریتم پر مبنی ہے۔ اس کا نمبرش کیا جاتا ہے 9 کاراکتر کا سٹرنگ، جس میں ایک سولڈلائن کے بعد 4 بائٹ رینج کی تعداد اور 4 بائٹ نمبرش کی جگہ کا تعین کیا جاتا ہے۔ وہاں تک ان کو پرنٹبل کاراکتر کے طور پر کد کیا جاتا ہے، جس میں ہر کاراکتر 6 بیٹ کا ہوگا، اور کمترین وائیبل بیٹ کا ترجیح دیا جاتا ہے۔ 0 سے 63 کو "./0-9A-Za-z" میں کد کیا جاتا ہے۔ نمبرش میں غیر مجاز کاراکتر استعمال کرنا crypt() کی فشل شدگی کا باعث بن سکتا ہے۔
[CRYPT_MD5] MD5 کریپٹ کا استعمال ایک سیلٹ کا استعمال کرتا ہے جس کا شروع $1$ سے ہوتا ہے اور 12 چارتر کا سیلٹ کا استعمال کرتا ہے۔
[CRYPT_BLOWFISH] بلاووفش الگوریتم ایک سیلٹ کا استعمال کرتا ہے جس کا شروع "$2a$" سے ہوتا ہے اور دو چارتر کا cost پارامتر، "$" اور 64 چارتر کا سیلٹ کا استعمال کرتا ہے جو "./0-9A-Za-z" سے تشکیل دیا جاتا ہے۔ سیلٹ میں اس کے باہر کا استعمال کیا جائے تو crypt() کا رتن خالی سترنگ بن جائے گا۔ دو چارتر کا cost پارامتر دفعات کا تعین کرتا ہے جو 2 کی بنیاد پر دفعات کا تعین کرتا ہے، جس کا دامن 04-31 ہوتا ہے، اس کے باوجود اس کا استعمال کیا جائے تو crypt() کا رتن ناکام بن جائے گا۔
CRYPT_SHA256 SHA-256 الگوریتم ایک سیلٹ کا استعمال کرتا ہے جس کا شروع $5$ سے ہوتا ہے اور 16 چارتر کا سیلٹ کا استعمال کرتا ہے جس کا استعمال کریپٹ کا استعمال بھیتر محفوظ رہ جائے گا۔ اگر سیلٹ کا استعمال "rounds=<N>$" سے شروع ہوتا ہے تو N کا عددی اقدار کریپٹ کا استعمال کا دفعات کا تعین کرتا ہے، جو بلاووفش الگوریتم کا cost پارامتر کی طرح ہوتا ہے۔ طبعی دفعات کا تعداد 5000 ہے، کم از کم 1000، زیادہ از زیادہ 999,999,999، اس کے باوجود کسی اضافی N کا استعمال کیا جائے گا جو اس سے نزدیک ہوتا ہے۔
CRYPT_SHA512 SHA-512 الگوریتم ایک سیلٹ کا استعمال کرتا ہے جس کا شروع $6$ سے ہوتا ہے اور 16 چارتر کا سیلٹ کا استعمال کرتا ہے جس کا استعمال کریپٹ کا استعمال بھیتر محفوظ رہ جائے گا۔ اگر سیلٹ کا استعمال "rounds=<N>$" سے شروع ہوتا ہے تو N کا عددی اقدار کریپٹ کا استعمال کا دفعات کا تعین کرتا ہے، جو بلاووفش الگوریتم کا cost پارامتر کی طرح ہوتا ہے۔ طبعی دفعات کا تعداد 5000 ہے، کم از کم 1000، زیادہ از زیادہ 999,999,999، اس کے باوجود کسی اضافی N کا استعمال کیا جائے گا جو اس سے نزدیک ہوتا ہے۔

اس فنکشن کا پشتیبندگی کرنے والے نظام میں، اگر اس سلسلے کی مدد فراہم ہوتی ہے تو اس سلسلے کو "1" میں ستائش کی جائے، درغیر این، "0" میں ستائش کی جائے۔

تعلیمات:کوئی کریپٹ کا دکھائی دینے والا فنکشن نہیں ہے۔crypt() فنکشن ایک ایک سمت کا الگوریتم استعمال کرتا ہے۔

فارمچر

crypt(شرویدہ,سلت)
پارامتر وصف
شرویدہ ضروری۔شرویدہ کا شارٹ کا تعین کرنا ہوتا ہے جس کو کریپٹ کیا جائے گا۔
سلت اختیاری۔استفاده کی جاتی ہیں تاکہ کریپٹ کا استعمال بھیتر محفوظ رہ جائے، کیونکہ کریپٹ کی جاری شارٹ کا استعمال کیا جاتا ہے جس سے کریپٹ کا استعمال بھیتر محفوظ رہ جائے۔ اگر سیلٹ پارامتر فراہم نہیں کیا جاتا تو پی‌اچ‌پی ہر بار اس فنکشن کو بلاک کریپٹ سیلٹ کا ایک رینج کریپٹ سیلٹ پیدا کر سکتا ہے۔

تکنیکی تفصیلات

بگتا: رتن آپس شارژ کریپت یا ایک چارتر کا سترنگ جس کا سائز کم از 13 چارتر ہو، تا کہ ناکام ہونے پر سیلٹ سے الگ رہ جائے۔
ورژن پی‌اچ‌پی: 4+

آپدیت لوگ

ورژن توضیحات
5.3.2 Ulrich Drepper کی عملیاتی پر مبنی، SHA-256 الگوریتم اور SHA-512 الگوریتم پر مبنی crypt کو نئی شکل میں شامل کیا گیا.
5.3.2 Blowfish الگوریتم کا معاملہ، جس میں غیر مجاز حلچک کی وجہ سے مسئلہ پیش ہوتا تھا، "فشل" الفاظ کو بازگشت دیتا تھا ("*0" یا "*1") جس کی بجائے DES الگوریتم کو استعمال نہیں کیا جاتا تھا.
5.3.0 پی ایچ پی اب اپنی خود کی MD5 Crypt عملیاتی کو شامل کررہا ہے، جس میں معیاری DES الگوریتم، توسیع یافته DES الگوریتم اور Blowfish الگوریتم شامل ہیں۔ اگر سسٹم میں معیاری عملیات نہیں موجود ہو، تو پی ایچ پی اپنی عملیاتی کو استعمال کرے گا۔

مثال

مثال 1

اس مثال میں، ہم مختلف الگوریتموں کو تجربہ کریں گے:

<?php
// دو حرف salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES نہیں سپورٹ کیاجاتا.\n<br>";
}
// 4 حرف salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES نہیں سپورٹ کیاجاتا.\n<br>";
}
// جس میں $1$ شروع ہوتا ہے 12 حرف
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 نہیں سپورٹ کیاجاتا.\n<br>";
}
// Salt جس میں $2a$ شروع ہوتا ہے۔ دو رقمی cost پارامتر: 09. 22 حرف
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES نہیں سپورٹ کیاجاتا.\n<br>";
}
// با $5$ شروع شده 16 کاراکتر نمک. تعداد دفعات پیش‌فرض 5000 است.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 not supported.\n<br>";
}
// با $5$ شروع شده 16 کاراکتر نمک. تعداد دفعات پیش‌فرض 5000 است.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>

خروجی کد بالا (بستگی به سیستم عامل دارد):

Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.