बीक्रिप्ट

bcrypt एक पासवर्ड-हैशिंग फ़ंक्शन है, जिसे नील्स प्रोवोस और डेविड माज़िएरेस द्वारा डिज़ाइन किया गया है, जो ब्लोफिश (सिफर)सिफर) सिफर पर आधारित है और 1999 में USENIX में प्रस्तुत किया गया था। इंद्रधनुष तालिका  हमलों से बचाने के लिए एक नमक (क्रिप्टोग्राफी) को शामिल करने के अलावा, bcrypt एक अनुकूली कार्य है: समय के साथ, पुनरावृत्ति की संख्या को धीमा करने के लिए बढ़ाया जा सकता है, इसलिए यह संगणना शक्ति बढ़ने के साथ भी क्रूर-बल खोज हमलों के लिए प्रतिरोधी रहता है।

bcrypt फ़ंक्शन OpenBSD के लिए डिफ़ॉल्ट पासवर्ड हैश एल्गोरिथ्म  है और कुछ Linux वितरण जैसे SUSE Linux के लिए डिफ़ॉल्ट था। C (प्रोग्रामिंग लैंग्वेज), C++, C शार्प (प्रोग्रामिंग लैंग्वेज)|C#, Embarcadero Delphi, Elixir (प्रोग्रामिंग लैंग्वेज) में bcrypt के कार्यान्वयन हैं। जाओ (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग भाषा), जावास्क्रिप्ट, पर्ल, पीएचपी, पायथन (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा), और अन्य भाषाएँ।

पृष्ठभूमि
ब्लोफिश अपने महंगे कुंजी सेटअप चरण के लिए ब्लॉक सिफर के बीच उल्लेखनीय है। यह एक मानक स्थिति में उपकुंजियों के साथ शुरू होता है, फिर कुंजी के हिस्से का उपयोग करके ब्लॉक एन्क्रिप्शन करने के लिए इस स्थिति का उपयोग करता है, और कुछ उपकुंजियों को बदलने के लिए उस एन्क्रिप्शन (जो हैशिंग पर अधिक सटीक है) के परिणाम का उपयोग करता है। फिर यह कुंजी के दूसरे भाग को एन्क्रिप्ट करने के लिए इस संशोधित स्थिति का उपयोग करता है, और अधिक उपकुंजियों को बदलने के लिए परिणाम का उपयोग करता है। यह इस तरह से आगे बढ़ता है, जब तक कि सभी उपकुंजियों को सेट नहीं किया जाता है, तब तक कुंजी को हैश करने और राज्य के बिट्स को बदलने के लिए उत्तरोत्तर संशोधित स्थिति का उपयोग किया जाता है।

Provos और Mazières ने इसका फायदा उठाया और इसे और आगे ले गए। उन्होंने ब्लोफिश के लिए एक नया कुंजी सेटअप एल्गोरिथम विकसित किया, परिणामी सिफर एक्सब्लोफिश (महंगा कुंजी शेड्यूल ब्लोफिश) को डब किया। कुंजी सेटअप मानक ब्लोफिश कुंजी सेटअप के एक संशोधित रूप से शुरू होता है, जिसमें सभी उपकुंजियों को सेट करने के लिए नमक और पासवर्ड दोनों का उपयोग किया जाता है। इसके बाद कई राउंड होते हैं जिनमें मानक ब्लोफिश कीइंग एल्गोरिथ्म को वैकल्पिक रूप से नमक और पासवर्ड को कुंजी के रूप में उपयोग करते हुए लागू किया जाता है, प्रत्येक राउंड पिछले राउंड से उपकुंजी स्थिति से शुरू होता है। सिद्धांत रूप में, यह मानक ब्लोफिश कुंजी शेड्यूल से अधिक मजबूत नहीं है, लेकिन रीकीइंग राउंड की संख्या विन्यास योग्य है; इसलिए इस प्रक्रिया को मनमाने ढंग से धीमा किया जा सकता है, जो हैश या नमक पर क्रूर-बल के हमलों को रोकने में मदद करता है।

विवरण
bcrypt फ़ंक्शन का इनपुट पासवर्ड स्ट्रिंग (72 बाइट्स तक), एक संख्यात्मक लागत और 16-बाइट (128-बिट) नमक मान है। नमक आमतौर पर एक यादृच्छिक मूल्य है। 24-बाइट (192-बिट) हैश की गणना करने के लिए bcrypt फ़ंक्शन इन इनपुट का उपयोग करता है। bcrypt फ़ंक्शन का अंतिम आउटपुट फ़ॉर्म की एक स्ट्रिंग है:

$2$[लागत]$[22 वर्ण नमक] [31 वर्ण हैश]

उदाहरण के लिए, इनपुट पासवर्ड के साथ, लागत  , और एक यादृच्छिक नमक, bcrypt का आउटपुट स्ट्रिंग है

$2a$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW \__/\/ \____________________/\________________________________________/ एल्ग कॉस्ट सॉल्ट हैश

कहाँ:


 * : हैश एल्गोरिथम पहचानकर्ता (बीक्रिप्ट)
 * : इनपुट लागत (212 यानी 4096 राउंड)
 * : इनपुट साल्ट का एक बेस-64 एनकोडिंग
 * : परिकलित 24 बाइट हैश के पहले 23 बाइट्स का बेस-64 एन्कोडिंग

bcrypt में बेस-64 एनकोडिंग तालिका का उपयोग करता है, जो इससे अलग है  बेस 64 एन्कोडिंग।

संस्करण इतिहास
$2$ (1999)

मूल bcrypt विनिर्देशन के एक उपसर्ग को परिभाषित करता है. यह मॉड्यूलर तहखाना (सी)  प्रारूप का अनुसरण करता है OpenBSD पासवर्ड फ़ाइल में पासवर्ड संग्रहीत करते समय उपयोग किया जाने वाला प्रारूप:


 * : MD5-आधारित क्रिप्ट ('md5crypt')
 * : ब्लोफिश-आधारित क्रिप्ट ('बीक्रिप्ट')
 * : SHA-1-आधारित क्रिप्ट ('sha1crypt')
 * : SHA-256-आधारित क्रिप्ट ('sha256crypt')
 * : SHA-512-आधारित क्रिप्ट ('sha512crypt')

$2a$

मूल विनिर्देश परिभाषित नहीं करता था कि गैर-एएससीआईआई चरित्र को कैसे संभालना है, न ही एक अशक्त टर्मिनेटर को कैसे संभालना है। विनिर्देश को यह निर्दिष्ट करने के लिए संशोधित किया गया था कि हैशिंग स्ट्रिंग्स:


 * स्ट्रिंग UTF-8 एन्कोडेड होनी चाहिए
 * अशक्त टर्मिनेटर शामिल होना चाहिए

इस परिवर्तन के साथ, संस्करण को बदल दिया गया था $2x$, $2y$ (जून 2011)

जून 2011 में, क्रिप्ट_ब्लोफिश में एक बग की खोज की गई थी, जो कि bcrypt का एक PHP कार्यान्वयन है। यह 8 बिट सेट वाले पात्रों को गलत तरीके से संभाल रहा था। उन्होंने सुझाव दिया कि सिस्टम प्रशासक अपने मौजूदा पासवर्ड डेटाबेस को बदलकर अद्यतन करें  साथ , यह इंगित करने के लिए कि वे हैश खराब हैं (और पुराने टूटे हुए एल्गोरिदम का उपयोग करने की आवश्यकता है)। उन्होंने crypt_blowfish एमिट होने का सुझाव भी दिया   निश्चित एल्गोरिथम द्वारा उत्पन्न हैश के लिए।

कैनोनिकल ओपनबीएसडी समेत किसी और ने 2x/2y के विचार को अपनाया नहीं। यह संस्करण मार्कर परिवर्तन crypt_blowfish तक सीमित था।

$2b$ (फरवरी 2014)

bcrypt के OpenBSD कार्यान्वयन में एक बग का पता चला था। यह पासवर्ड की लंबाई रखने के लिए एक अहस्ताक्षरित 8-बिट मान का उपयोग कर रहा था। 255 बाइट्स से अधिक के पासवर्ड के लिए, 72 बाइट्स पर छोटा होने के बजाय पासवर्ड को 72 से कम या लंबाई मॉड्यूलर अंकगणितीय 256 पर छोटा कर दिया जाएगा। उदाहरण के लिए, एक 260 बाइट पासवर्ड को 72 बाइट्स पर छोटा करने के बजाय 4 बाइट्स पर छोटा कर दिया जाएगा।.

bcrypt OpenBSD के लिए बनाया गया था। जब उनके पुस्तकालय में एक बग था, तो उन्होंने संस्करण संख्या को टक्कर देने का फैसला किया।

एल्गोरिथम
नीचे दिया गया bcrypt फ़ंक्शन ब्लोफ़िश (सिफर) का उपयोग करके 64 बार OrpheanBeholderScryDoubt टेक्स्ट को एन्क्रिप्ट करता है। Bcrypt में सामान्य ब्लोफिश की सेटअप फंक्शन को एक महंगे की सेटअप (EksBlowfishSetup) फंक्शन से बदल दिया जाता है:

'फंक्शन' bcrypt 'इनपुट:' लागत: संख्या (4..31) <विस्तार शैली = रंग: हरा; > लॉग2(पुनरावृत्ति)। उदा. 12 ==> 212 = 4,096 पुनरावृत्तियाँ नमक: बाइट्स की सरणी (16 बाइट्स) <अवधि शैली = रंग: हरा; >रैंडम सॉल्ट पासवर्ड: बाइट्स की सरणी (1..72 बाइट्स) <अवधि शैली = रंग: हरा; >UTF-8 एन्कोडेड पासवर्ड आउटपुट: हैश: बाइट्स की सरणी (24 बाइट्स) <अवधि शैली = रंग: हरा; >//महंगी कुंजी सेटअप एल्गोरिद्म के साथ ब्लोफ़िश अवस्था को प्रारंभ करें <अवधि शैली = रंग: हरा; >//P: 18 उपकुंजियों की सरणी (UInt32[18]) <अवधि शैली = रंग: हरा; >//एस: चार प्रतिस्थापन बॉक्स (एस-बॉक्स), एस0...एस3. प्रत्येक एस-बॉक्स 1,024 बाइट्स (UInt32[256]) है पी, एस ← EksBlowfishSetup(लागत, नमक, पासवर्ड) <अवधि शैली = रंग: हरा; >// बार-बार पाठ को एन्क्रिप्ट करें OrpheanBeholderScryDoubt 64 बार ctext ← OrpheanBeholderScryDoubt //24 बाइट्स ==> तीन 64-बिट ब्लॉक 'दोहराना' (64) ctext ← EncryptECB(P, S, ctext) // ECB मोड में मानक ब्लोफ़िश का उपयोग करके एन्क्रिप्ट करें <अवधि शैली = रंग: हरा; >//24-बाइट ctext का परिणाम पासवर्ड हैश है 'वापसी' श्रृंखलाबद्ध (लागत, नमक, ctext)

महंगा कुंजी सेटअप
bcrypt एल्गोरिथम अपने Eksblowfish कुंजी सेटअप एल्गोरिथम पर बहुत अधिक निर्भर करता है, जो निम्नानुसार चलता है:

फंक्शन EksBlowfishSetup इनपुट: पासवर्ड: बाइट्स की सरणी (1..72 बाइट्स) <अवधि शैली = रंग: हरा; >UTF-8 एन्कोडेड पासवर्ड नमक: बाइट्स की सरणी (16 बाइट्स) <अवधि शैली = रंग: हरा; >रैंडम सॉल्ट लागत: संख्या (4..31) <अवधि शैली = रंग: हरा; > लॉग2(पुनरावृत्ति)। उदा. 12 ==> 212 = 4,096 पुनरावृत्तियाँ आउटपुट: पी: UInt32 की सरणी <विस्तार शैली = रंग: हरा; >18 प्रति-राउंड उपकुंजियों की सरणी एस1..एस4: UInt32 की सरणी <विस्तार शैली = रंग: हरा; > चार SBoxes की सरणी; प्रत्येक SBox 256 UInt32 है (यानी प्रत्येक SBox 1 KiB है) <अवधि शैली = रंग: हरा; >//पी के हेक्स अंकों के साथ पी (उपकुंजी), और एस (प्रतिस्थापन बक्से) को प्रारंभ करें पी, एस ← इनिशियलस्टेट <अवधि शैली = रंग: हरा; >//पासवर्ड और नमक के आधार पर P और S को परमिट करें P, S ← ExpandKey(P, S, नमक, पासवर्ड) <अवधि शैली = रंग: हरा; >//यह महंगी कुंजी सेटअप का महंगा हिस्सा है। <अवधि शैली = रंग: हरा; >//अन्यथा कुंजी सेटअप ब्लोफिश के समान है। 'दोहराना' (2लागत) P, S ← ExpandKey(P, S, 0, पासवर्ड) P, S ← ExpandKey(P, S, 0, नमक) 'रिटर्न' पी, एस

इनिशियलस्टेट मूल ब्लोफिश एल्गोरिथम की तरह काम करता है, पी-एरे और एस-बॉक्स प्रविष्टियों को आंशिक भाग के साथ पॉप्युलेट करता है $$\pi$$ हेक्साडेसिमल में।

कुंजी का विस्तार करें
ExpandKey फ़ंक्शन निम्न कार्य करता है:

फ़ंक्शन ExpandKey इनपुट: पासवर्ड: बाइट्स की सरणी (1..72 बाइट्स) <अवधि शैली = रंग: हरा; >UTF-8 एन्कोडेड पासवर्ड नमक: बाइट [16] <विस्तार शैली = रंग: हरा; >रैंडम सॉल्ट पी: UInt32 की सरणी <विस्तार शैली = रंग: हरा; > 18 उपकुंजियों की सारणी एस1..एस4: UInt32 [1024] <विस्तार शैली = रंग: हरा; > चार 1 KB SBoxes आउटपुट: पी: UInt32 की सरणी <विस्तार शैली = रंग: हरा; >18 प्रति-राउंड उपकुंजियों की सारणी एस1..एस4: UInt32 [1024] <विस्तार शैली = रंग: हरा; > चार 1 KB SBoxes <अवधि शैली = रंग: हरा; > // P उपकुंजियों की सरणी में पासवर्ड मिलाएं for n ← 1 से 18 करें पीn ← पीn xor पासवर्ड[32(n-1)..32n-1] <अवधि शैली= रंग: हरा; >//पासवर्ड को चक्रीय मानें <अवधि शैली = रंग: हरा; >//128-बिट नमक को 64-बिट के दो हिस्सों (ब्लोफ़िश ब्लॉक आकार) के रूप में लें। नमकहाफ[0] ← नमक[0..63] <अवधि शैली= रंग: हरा; >//64-बिट नमक कम करें नमक आधा [1] ← नमक [64..127] <अवधि शैली = रंग: हरा; >//ऊपरी 64-बिट नमक <अवधि शैली = रंग: हरा; >// सभी शून्यों के साथ 8-बाइट (64-बिट) बफर प्रारंभ करें। ब्लॉक ← 0 <अवधि शैली = रंग: हरा; >//आंतरिक स्थिति को पी-बॉक्स में मिलाएं 'for' n ← 1 'से' 9 'करें' <अवधि शैली = रंग: हरा; >//xor 64-बिट ब्लॉक 64-बिट सॉल्ट हाफ के साथ ब्लॉक ← ब्लॉक xor नमक आधा [(n-1) mod 2] <अवधि शैली = रंग: हरा; >//प्रत्येक पुनरावृत्ति नमक आधा [0], और नमक आधा [1] के बीच बारी-बारी से <अवधि शैली = रंग: हरा; >//वर्तमान कुंजी शेड्यूल का उपयोग करके ब्लॉक एन्क्रिप्ट करें ब्लॉक ← एनक्रिप्ट (पी, 'एस', ब्लॉक) पी2n ← ब्लॉक [0..31] <अवधि शैली = रंग: हरा; >//ब्लॉक के 32-बिट कम करें पी2n+1 ← ब्लॉक [32..63] <अवधि शैली = रंग: हरा; >//ऊपरी 32-बिट ब्लॉक <अवधि शैली = रंग: हरा; >// एन्क्रिप्टेड स्थिति को राज्य के आंतरिक एस-बॉक्स में मिलाएं 'for' i ← 1 'to' 4 'करें' 'for' n ← 0 'से' 127 'करें' ब्लॉक ← एनक्रिप्ट (स्टेट, ब्लॉक 'xor' Salt[64(n-1)..64n-1]) //जैसा कि ऊपर एसi[2एन] ← ब्लॉक [0..31] <अवधि शैली = रंग: हरा; >//32-बिट कम करें एसi[2n+1] ← ब्लॉक[32..63] <अवधि शैली = रंग: हरा; >//ऊपरी 32-बिट्स 'वापसी' स्थिति

इस तरह,  नियमित ब्लोफिश की अनुसूची के समान है क्योंकि सभी शून्य नमक मूल्य वाले सभी एक्सओआर अप्रभावी हैं।    समान है, लेकिन 128-बिट कुंजी के रूप में नमक का उपयोग करता है।

उपयोगकर्ता इनपुट
ओपनबीएसडी कार्यान्वयन के बाद, बीक्रिप्ट के कई कार्यान्वयन पासवर्ड को पहले 72 बाइट्स तक काट देते हैं।

गणितीय एल्गोरिथ्म को स्वयं 18 32-बिट उपकुंजियों (72 ऑक्टेट/बाइट्स के बराबर) के साथ आरंभीकरण की आवश्यकता होती है। बीक्रिप्ट का मूल विनिर्देश एल्गोरिदम के लिए उपयोगकर्ता स्थान से संख्यात्मक मानों में टेक्स्ट-आधारित पासवर्ड मैप करने के लिए किसी एक विशेष विधि को अनिवार्य नहीं करता है। पाठ में एक संक्षिप्त टिप्पणी का उल्लेख है, लेकिन यह अनिवार्य नहीं है, केवल एक वर्ण स्ट्रिंग के ASCII एन्कोडेड मान का उपयोग करने की संभावना: अंत में, मुख्य तर्क एक गुप्त एन्क्रिप्शन कुंजी है, जो 56 तक उपयोगकर्ता द्वारा चुना गया पासवर्ड हो सकता है बाइट्स (कुंजी के ASCII स्ट्रिंग होने पर समाप्ति शून्य बाइट सहित)।

ध्यान दें कि उपरोक्त उद्धरण 56 बाइट्स तक के पासवर्ड का उल्लेख करता है, भले ही एल्गोरिथ्म स्वयं 72 बाइट प्रारंभिक मान का उपयोग करता हो। हालांकि प्रोवोस और माजिएरेस छोटे प्रतिबंध का कारण नहीं बताते हैं, वे ब्रूस श्नेयर के ब्लोफिश के मूल विनिर्देश से निम्नलिखित कथन से प्रेरित हो सकते हैं, कुंजी आकार पर 448 [बिट] सीमा यह सुनिश्चित करती है कि [sic] प्रत्येक उपकुंजी का प्रत्येक बिट कुंजी के प्रत्येक बिट पर निर्भर करता है। कार्यान्वयन में पासवर्ड को प्रारंभिक संख्यात्मक मानों में परिवर्तित करने के उनके दृष्टिकोण में भिन्नता है, जिसमें कभी-कभी गैर-ASCII वर्णों वाले पासवर्ड की शक्ति को कम करना भी शामिल है।

अन्य पासवर्ड हैशिंग एल्गोरिदम की तुलना
यह नोट करना महत्वपूर्ण है कि bcrypt एक Key_derivation_function|key deriation function (KDF) नहीं है। उदाहरण के लिए, पासवर्ड से 512-बिट कुंजी प्राप्त करने के लिए bcrypt का उपयोग नहीं किया जा सकता है। उसी समय, pbkdf2, scrypt, और argon2 जैसे एल्गोरिदम पासवर्ड-आधारित कुंजी व्युत्पत्ति कार्य हैं - जहाँ आउटपुट का उपयोग केवल कुंजी व्युत्पत्ति के बजाय पासवर्ड हैशिंग के उद्देश्य से किया जाता है।

पासवर्ड हैशिंग को आम तौर पर <1000 एमएस पूरा करने की आवश्यकता होती है। इस परिदृश्य में, bcrypt pbkdf2, scrypt, और argon2 से ज्यादा मजबूत है।


 * 'पीबीकेडीएफ2': पीबीकेडीएफ2 बीक्रिप्ट से कमजोर है। आमतौर पर इस्तेमाल किया जाने वाला SHA2 हैशिंग एल्गोरिथम मेमोरी-हार्ड नहीं है। SHA2 को अत्यधिक हल्के होने के लिए डिज़ाइन किया गया है ताकि यह हल्के उपकरणों (जैसे स्मार्ट कार्ड) पर चल सके। इसका मतलब है कि PBKDF2 पासवर्ड स्टोरेज के लिए बहुत कमजोर है, क्योंकि कमोडिटी SHA-2 हैशिंग हार्डवेयर जो प्रति सेकंड खरबों हैश का प्रदर्शन कर सकता है, आसानी से खरीदा जाता है
 * स्क्रीप्ट: 4 एमबी से कम मेमोरी आवश्यकताओं के लिए स्क्रीप्ट बीक्रिप्ट से कमजोर है। जीपीयू आधारित हमलों (पासवर्ड भंडारण के लिए) के खिलाफ रक्षा के तुलनीय स्तर को प्राप्त करने के लिए स्क्रिप को लगभग 1000 गुना मेमोरी की आवश्यकता होती है।
 * आर्गन2: आर्गन2 1 सेकेंड से कम रन टाइम (यानी पासवर्ड ऑथेंटिकेशन के लिए) के लिए बीक्रिप्ट से कमजोर है। Argon2 > = ~ 1000ms रनटाइम (जो पासवर्ड हैशिंग के लिए अनुपयुक्त है, लेकिन कुंजी-व्युत्पत्ति के लिए पूरी तरह से स्वीकार्य है) तक bcrypt की ताकत से मेल नहीं खाता या पार नहीं करता है।
 * पफरफिश2 बीक्रिप्ट का विकास है जो ट्यून करने योग्य मेमोरी फुटप्रिंट (जैसे स्क्रीप्ट और आर्गन2) का उपयोग करता है, न कि बीक्रिप्ट के फिक्स्ड 4 केबी मेमोरी फुटप्रिंट का। स्क्रीप्ट या आर्गन2 के समान, पफरफिश2 अधिक मेमोरी का उपयोग करके अपनी कठिनाई प्राप्त करता है। स्क्रीप्ट और आर्गन2 के विपरीत, पफरफिश2 केवल सीपीयू कोर के एल2 कैश में काम करता है। जबकि स्क्रीप्ट और आर्गन 2 अपनी मेमोरी कठोरता को बेतरतीब ढंग से बहुत सी रैम तक पहुंच कर प्राप्त करते हैं, पफरफिश 2 खुद को सीपीयू कोर के लिए उपलब्ध समर्पित एल 2 कैश तक ही सीमित करता है। यह स्क्रीप्ट और आर्गन2 की तुलना में कस्टम हार्डवेयर में लागू करना और भी कठिन बना देता है। पफरफिश 2 का आदर्श स्मृति पदचिह्न कोर के लिए उपलब्ध कैश का आकार है (उदाहरण के लिए इंटेल एल्डर लेक के लिए 1.25 एमबी ) यह पफरफिश2 को जीपीयू या एएसआईसी के प्रति अधिक प्रतिरोधी बनाता है।

अधिकतम पासवर्ड लंबाई
bcrypt की अधिकतम पासवर्ड लंबाई 72 बाइट्स है। यह अधिकतम ExpandKey फ़ंक्शन के पहले ऑपरेशन से आता है  पासवर्ड के साथ 18 4-बाइट उपकुंजी (पी):

पी1..पी18 ← पी1..पी18 xor पासवर्डबाइट्स

पासवर्ड (जो UTF-8 एन्कोडेड है), 72-बाइट लंबा होने तक दोहराया जाता है। उदाहरण के लिए, का एक पासवर्ड:


 * (29 बाइट्स)

तब तक दोहराया जाता है जब तक यह 18 पी प्रति-राउंड उपकुंजियों के 72-बाइट से मेल नहीं खाता:


 * (72 बाइट्स)

सबसे खराब स्थिति में एक पासवर्ड 18 वर्णों तक सीमित होता है, जब प्रत्येक वर्ण को UTF-8 एन्कोडिंग के 4 बाइट्स की आवश्यकता होती है। उदाहरण के लिए:


 * (18 अक्षर, 72 बाइट्स)

पासवर्ड हैश ट्रंकेशन
bcrypt एल्गोरिथम में 24-बाइट टेक्स्ट को बार-बार एन्क्रिप्ट करना शामिल है:


 * (24-बाइट्स)

यह सिफरटेक्स्ट के 24 बाइट्स उत्पन्न करता है, जैसे:


 * (24-बाइट्स)

विहित OpenBSD कार्यान्वयन इसे 23 बाइट्स तक काट देता है:


 * (23-बाइट्स)

यह स्पष्ट नहीं है कि विहित कार्यान्वयन परिणामी पासवर्ड हैश से 8-बिट क्यों हटाता है।

रेडिक्स -64 एन्कोडेड होने पर ये 23 बाइट 31 वर्ण बन जाते हैं:


 * (31-अक्षर)

बेस 64 एन्कोडिंग वर्णमाला
कैनोनिकल ओपनबीएसडी कार्यान्वयन द्वारा उपयोग की जाने वाली एन्कोडिंग क्रिप्ट (सी) के समान बेस 64 वर्णमाला का उपयोग करती है, जो है. इसका अर्थ है कि एन्कोडिंग अधिक सामान्य बेस64#कार्यान्वयन और इतिहास के साथ संगत नहीं है।

यह भी देखें

 * Argon2 - 2015 में पासवर्ड हैशिंग प्रतियोगिता का विजेता
 * क्रिप्ट (सी) # ब्लोफिश-आधारित योजना - 2002 में विकसित ब्लोफिश-आधारित क्रॉस-प्लेटफ़ॉर्म फ़ाइल एन्क्रिप्शन उपयोगिता
 * ccrypt (सी) - यूनिक्स सी लाइब्रेरी फ़ंक्शन
 * क्रिप्ट (यूनिक्स) - यूनिक्स उपयोगिता
 * सीक्रिप्ट - उपयोगिता
 * चाबी खींचना
 * mcrypt - उपयोगिता
 * PBKDF2 - एक व्यापक रूप से इस्तेमाल किया जाने वाला मानक पासवर्ड-आधारित कुंजी व्युत्पत्ति फ़ंक्शन 2
 * स्क्रीप्ट - पासवर्ड-आधारित कुंजी व्युत्पत्ति फ़ंक्शन (और एक उपयोगिता भी)

बाहरी संबंध

 * crypt_blowfish, the implementation maintained by Openwall