PHP crypt() फ़ंक्शन

रोगचक्र और उपयोग

crypt() फ़ंक्शन डिजिटल DES, Blowfish या MD5 गणित के द्वारा एनक्रिप्शन की गई स्ट्रिंग वापस देता है।

विभिन्न ऑपरेटिंग सिस्टमों पर, इस फ़ंक्शन की व्यवहार अलग-अलग होती है, कुछ ऑपरेटिंग सिस्टम एक से अधिक गणित को समर्थित करते हैं। इंस्टॉलेशन के समय, PHP जाँच करता है कि कौन-सा गणित उपलब्ध है और कौन-सा गणित का उपयोग करना है।

विशिष्ट गणित का विशिष्ट salt पैरामीटर के फॉर्मेट और लंबाई पर निर्भर करता है। salt का उपयोग, विशिष्ट एनक्रिप्शन तकनीक द्वारा उत्पन्न विशिष्ट स्ट्रिंग की संख्या को बढ़ाकर एनक्रिप्शन को सुरक्षित बनाता है।

यहाँ crypt() फ़ंक्शन के साथ उपयोग के लिए कुछ स्थिर अनुपात हैं। इन स्थिर अनुपात के मान इंस्टॉलेशन के समय PHP द्वारा सेट किए गए हैं।

स्थिर

[CRYPT_SALT_LENGTH] डिफ़ॉल्ट एनक्रिप्शन लंबाई। आधिकारिक DES एनक्रिप्शन का उपयोग करता है, लंबाई 2 है
[CRYPT_STD_DES] आधिकारिक DES गणित का उपयोग "./0-9A-Za-z" अक्षरों में से दो अक्षरों को नमक के रूप में किया जाता है। नमक में अवैध अक्षरों का उपयोग crypt() विफल होने के कारण होगा।
[CRYPT_EXT_DES] डिजिटल एक्सटेंशन आधारित DES गणित। इसका नमक (salt) 9 अक्षरों की स्ट्रिंग है, जो 1 एक्स्लाइन (underscore) के बाद 4 बाइट गुरुत्व बार और 4 बाइट साल्ट नंबर से मिला है। ये सह-अभिव्यक्तीय अक्षरों में कोड किए गए हैं, प्रत्येक अक्षर 6 बिट है, और न्यूनतम वैध बिटों के अनुसार प्राथमिकता है। 0 से 63 को "./0-9A-Za-z" में कोड किया गया है। नमक में अवैध अक्षरों का उपयोग crypt() विफल होने के कारण होगा।
[CRYPT_MD5] MD5 अलगोरिथ्म एक $1$ से शुरू होने वाली 12 अक्षर वाली वर्णमाला का सल्ट का उपयोग करता है。
[CRYPT_BLOWFISH] 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(str,salt)
पारामीटर वर्णन
str अनिवार्य। एन्कोड करने के लिए वर्णमाला निर्धारित करता है。
salt वृद्धि सक्षम। इसका उपयोग एन्कोड को अधिक सुरक्षित बनाने के लिए एन्कोड की गई अक्षर संख्या को बढ़ाने के लिए किया जाता है। यदि salt पारामीटर नहीं दिया गया है, तो PHP हर बार फ़ंक्शन को बुलाते समय एक रेंडम salt बनाएगा。

तकनीकी विवरण

वापसी वलय: गढ़ेशीय वर्णमाला को वापस करें या 13 अक्षर से कम वर्णमाला को वापस करें, ताकि विफल होने पर सोड के साथ अलग रहे।
PHP संस्करण: 4+

अद्यतन लॉग

संस्करण व्याख्या
5.3.2 Ulrich Drepper की व्यवस्था के आधार पर, SHA-256 व्यवस्था और SHA-512 व्यवस्था के आधार पर नई crypt व्यवस्था जोड़ी गई है。
5.3.2 Blowfish व्यवस्था के अवैध सर्किट के कारण पैदा होने वाली समस्या को ठीक किया, जो "विफल" शब्द ("*0" या "*1") वापस देता है, न कि DES व्यवस्था का उपयोग करता है।
5.3.0 PHP अब अपनी अपनी MD5 Crypt व्यवस्था को समाविष्ट करता है, जिसमें मानक DES व्यवस्था, विस्तृत DES व्यवस्था और Blowfish व्यवस्था शामिल हैं। यदि प्रणाली में इसकी कोई व्यवस्था नहीं है, तो PHP अपनी अपनी व्यवस्था का उपयोग करेगा。

उदाहरण

उदाहरण 1

इस उदाहरण में, हम विभिन्न व्यवस्थाओं को परीक्षण करेंगे:

<?php
// दो अक्षर salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 अक्षर salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// इस $1$ से शुरू होने वाले 12 अक्षर
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// इस $2a$ से शुरू होने वाले Salt. दो अंक के cost पारामीटर: 09. 22 अक्षर
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\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.";
}
?>

ऊपरी कोड का आउटपुट (ऑपरेटिंग सिस्टम पर निर्भर करता है):

स्टैंडर्ड डीएस: stqAdD7zlbByI
एक्सटेंडेड डीएस: _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.