ब्लोफिश ब्रूस श्नियर द्वारा दिसंबर 1993 में आविष्कृत एक सममित ब्लॉक सिफर एल्गोरिदम है। ब्लोफिश DES या IDEA का विकल्प है। सबसे लोकप्रिय फिस्टेल नेटवर्क सिफर में से एक ब्लोफिश है। ब्लोफिश एल्गोरिदम में 64-बिट ब्लॉक आकार और 42 बिट्स से 448 बिट्स तक परिवर्तनीय कुंजी लंबाई है। एल्गोरिदम में एक कुंजी-विस्तार भाग और डेटा-एन्क्रिप्शन भाग शामिल है।
ब्लोफिश अधिकतम 448 बिट्स की कुंजी को कई सबकी सरणियों में बदल देता है जिनका कुल 1042 32-बिट मान या 4168 बाइट्स है। यह एक 16-राउंड फिस्टेल सिस्टम है, जो बहुत उच्च कुंजी-निर्भर S-बॉक्स का समर्थन करता है और 16 पुनरावृत्तियों को सक्षम करता है।
हर राउंड एक कुंजी और डेटा निर्भर प्रतिस्थापन और एक कुंजी-निर्भर क्रमपरिवर्तन के साथ अनुकूलित होता है। 32-बिट शब्द और XOR ऑपरेशन जोड़ द्वारा लागू किए जाते हैं। एक P-सरणी और चार 32-बिट S-बॉक्स हैं।
P-सरणी में 18 32-बिट सबकी शामिल हैं, जबकि प्रत्येक S-बॉक्स में 256 प्रविष्टियां हैं। इनपुट एक 64 बिट डेटा तत्व है। सबकी जनरेशन की प्रक्रिया निम्नानुसार है:
ब्लोफिश सबकी की एक बहुत बड़ी संख्या का उपयोग करता है। इन कुंजियों को एन्क्रिप्शन और डिक्रिप्शन होने से पहले तैयार किया जाना है। कुंजी आकार फ़ील्ड 32 बिट्स से 448 बिट्स तक होता है। अन्य शब्दों में, कुंजी आकार 1 से 14 शब्दों तक होता है, प्रत्येक में 32 बिट्स का एक शब्द शामिल होता है। ये कुंजियाँ एक सरणी में निम्नानुसार सहेजी जाती हैं:
K1, K2, ..., Kn जहां 1 ≤ n ≤ 14
18, 32-बिट सबकी वाली P-सरणी की अवधारणा:
P1, P2, ..., P18।
P-सरणी का निर्माण बाद में वर्णित है।
चार 32-बिट S-बॉक्स हैं जिनमें प्रत्येक में 256 प्रविष्टियां हैं:
S1,0, S1,1... S1,255
S2,0, S2,1... S2,255
S3,0, S3,1... S3,255
S4,0, S4,1... S4,255
P-सरणी का निर्माण बाद में परिभाषित किया गया है।
यह पहले P-सरणी को आरंभ कर सकता है, उसके बाद चार S-बॉक्स को एक निश्चित स्ट्रिंग के साथ।
P सरणी और चार S बॉक्स को पाई के हेक्साडेसिमल अंकों के रूप में दर्शाया जाता है।
यह P-सरणी के साथ K सरणी के बिटवाइज़ XOR ऑपरेशन को लागू कर सकता है, आवश्यकतानुसार K सरणी से शब्दों का पुन: उपयोग करते हुए कुंजी बिट्स के साथ (यानी, P1 XOR (कुंजी के बत्तीस बिट्स), P2 XOR (कुंजी के बत्तीस बिट्स)।
यह 64 बिट ब्लॉक को एन्क्रिप्ट कर सकता है और सामान्य P और S सरणियों के साथ ऑल-जीरो को एन्क्रिप्ट करने के लिए निम्नलिखित एन्क्रिप्शन प्रक्रिया का उपयोग कर सकता है।
यह एन्क्रिप्शन के आउटपुट के साथ p1 और p2 का स्थान ले सकता है और नया आउटपुट p1 और p2 के रूप में नामित है।
यह वर्तमान P बॉक्स और S बॉक्स का उपयोग करके चरण 3 के आउटपुट को एन्क्रिप्ट कर सकता है और परिणामी एन्क्रिप्टेड टेक्स्ट के साथ p3 और p4 को बदल सकता है और नया आउटपुट p3 और p4 के रूप में नामित है।
यह निम्नलिखित चरणों को तब तक दोहरा सकता है जब तक कि यह P सरणी के सभी तत्वों को प्राप्त न कर ले यानी P1, P2।