कुंजी का उपयोग किए बिना सहेजें फ़ाइलों को एन्क्रिप्ट कैसे करें? [बन्द है]


21

मान लें कि मैंने एक साधारण प्रोग्राम बनाया है जो एक फाइल लेता है .datजिसे बाइनरी फॉर्मेट में एन्क्रिप्ट किया गया है , फिर मैं इसे एक बाइट सरणी में डिक्रिप्ट करता हूं और फिर सब कुछ फिर से डिक्रिप्ट की गई फ़ाइल में फिर से लिखा जाता है।

उदाहरण के लिए:

मैंने एक बाइनरी एन्क्रिप्शन एल्गोरिथ्म बनाया है। => 0100100001100101001000000110100001100100101011000 ...

लेकिन यह डिक्रिप्ट करने के लिए बहुत आसान है ...

क्या कोई रास्ता है, अगर यह संभव है, तो मेरी बचत प्रगति को एन्क्रिप्ट करने के लिए किसी भी प्रकार की कुंजी की आवश्यकता नहीं है?


15
क्या आप वाकई सहेजना एन्क्रिप्ट करना चाहते हैं? धोखा देने के आसान तरीके हैं, उदाहरण के लिए स्मृति संशोधन का उपयोग करते समय। मैं बस उन्हें zlib (उन्हें .gz में डाल) के साथ संपीड़ित करूँगा, यह आकार को कम करेगा और कुछ संभावित थिएटरों को इसे बंद करने से रोकेगा।
पवित्रब्लैकैट

36
Nitpicking: आप जो कर रहे हैं वह एन्कोडिंग है , एनक्रिप्शन नहीं ।
फिलिप

13
(यह मानते हुए कि यह एकल खिलाड़ी के लिए है) किसी एकल खिलाड़ी के खेल में धोखाधड़ी को रोकने की कोशिश न करें, यह आपके और खिलाड़ी दोनों के लिए कष्टप्रद है। और अंत में बेकार है।

6
यह है संभव नहीं फ़ाइलों को बचाने एन्क्रिप्ट करने के लिए इतना है कि उपयोगकर्ता पढ़ने के लिए या उन्हें संशोधित नहीं कर सकते। (क्योंकि, उदाहरण के लिए, वे डिबगिंग करने के ठीक बाद आपके गेम को डिबगर में रोक सकते हैं!)। हालाँकि, आप इसे कठिन बना सकते हैं (क्योंकि डिबगर में गेम को रोकने के लिए सही पल खोजने की तुलना में एक सादा पाठ फ़ाइल खोलना वास्तव में आसान है)। क्या आप ऐसा करने की कोशिश कर रहे हैं?
user253751

6
@DanielBejar मैंने अभी आपको बताया, आप इसे असंभव नहीं बना सकते, आप केवल इसे कठिन बना सकते हैं।
user253751

जवाबों:


77

सामान्य तौर पर आपको कभी भी अपने स्वयं के क्रिप्टोग्राफ़िक एल्गोरिदम का आविष्कार नहीं करना चाहिए, जब तक कि आपके पास गणित और कंप्यूटर विज्ञान दोनों में कम से कम पीएचडी न हो । लेकिन कई अच्छे स्टॉक एल्गोरिदम हैं जिनके पास कोई ज्ञात हमला नहीं है और कई प्रोग्रामिंग भाषाओं में मुफ्त कार्यान्वयन हैं। उदाहरण के लिए RC5, AES या ब्लोफिश। आपके गेम को विकसित करने के लिए आप किस तकनीक का उपयोग करते हैं, इसके आधार पर, यह सुरक्षित एन्क्रिप्शन आउट-ऑफ-द-बॉक्स भी दे सकता है।

हालांकि, सवाल यह है कि अगर savegames को एन्क्रिप्ट करना एक अच्छा विचार है।

सबसे पहले, जब आपका गेम निष्पादन योग्य होता है, तो एन्क्रिप्शन और डिक्रिप्शन करते हैं, आपको अपने गेम में एल्गोरिथम और कुंजी दोनों को शामिल करना होगा। इसका मतलब है कि एक निर्धारित हैकर उन्हें ढूंढ सकता है, उन्हें निकाल सकता है और एक सेवगेम संपादक बनाने के लिए उनका उपयोग कर सकता है। तो यह कभी भी 100% सुरक्षित नहीं हो सकता है।

दूसरा, आप ऐसा क्यों करना चाहते हैं? जब यह एक ऑनलाइन गेम है, तो आपको गेमस्टैट को ऑनलाइन स्टोर करना चाहिए जहां खिलाड़ी इसे संशोधित नहीं कर सकते। जब यह ऑफलाइन गेम है, तो फिर परेशान क्यों? एक धोखेबाज केवल अपने ही खेल के अनुभव को सबसे खराब कर सकता है। ईमानदार खिलाड़ी जो आपके खेल का आनंद लेना चाहते हैं, वे इससे बिल्कुल भी प्रभावित नहीं होंगे। दूसरी ओर, खिलाड़ियों को धोखा देने की अनुमति आपके खेल में मूल्य जोड़ सकती है । यह खिलाड़ियों को खेल को एक अलग तरीके से अनुभव करने की अनुमति देता है जो आपके खेल के लंबे समय तक आनंद को बढ़ा सकता है।


5
हालांकि मैं कल्पना नहीं कर सकता कि कोई कुछ घंटों में कुछ अच्छा कर सकता है। और आप किसी ऐसी चीज़ पर संसाधनों को बर्बाद कर रहे होंगे जिसकी आपको आवश्यकता नहीं है।
आस्तिस

6
"जब यह ऑफ़लाइन गेम है, तो परेशान क्यों?" क्या होगा यदि यह ऑनलाइन हाईस्कोर के साथ एकल-खिलाड़ी गेम है?
द गाइ हेट के साथ

19
"खिलाड़ियों को धोखा देने की अनुमति देना आपके खेल में मूल्य जोड़ सकता है" - इस कथन के लिए upvoted। मैं उन खेलों से वास्तव में नाराज हूं जो उस अनुभव के कुछ हिस्सों को लॉक करने का निर्णय लेते हैं जो मैंने तब तक भुगतान किया था जब तक कि मैं एक निश्चित स्तर की महारत हासिल नहीं करता, और मुझे खुशी है कि इन मामलों में, पूर्ण गेम को अनलॉक करने के लिए धोखा उपलब्ध हैं। उदाहरण के लिए, मैं पूरी तरह से गति भागों के लिए पुराने की आवश्यकता में एअर इंडिया के खिलाफ रेसिंग टूर्नामेंट में हार गया हूं ; मेरे लिए, आनंद विभिन्न परिदृश्यों के माध्यम से ड्राइविंग में था, इसलिए मैं आमतौर पर रेसिंग को छोड़ देता हूं और सभी नक्शे और कारों को अनलॉक करता हूं। एक खेल जो इसे रोकता है वह मुझे परेशान करेगा।
या मैपर

6
मुझे पसंद है "जब तक कि आपके पास गणित और कंप्यूटर विज्ञान दोनों में कम से कम पीएचडी न हो" तब तक फिर से लिखा जाए "जब तक आपके पास कम से कम ज्ञान है जो गणित और कंप्यूटर विज्ञान दोनों में पीएचडी हासिल करने के लिए आवश्यक होगा" (और तब भी, कम से कम जर्मनी में, पाठ्यक्रम अक्सर क्रिप्टो से संबंधित सामान से भरा होता है)। एक को पीएचडी को बेहतर बनाने के लिए स्वाभाविक रूप से डिग्री की आवश्यकता नहीं होती है।
8

5
@phresnel जब आप तकनीकी रूप से सही होते हैं, तो एक पीएचडी एक सैद्धांतिक विषय के मास्टर की एक मानक मीट्रिक होती है, जैसा कि विश्वसनीय संस्थानों द्वारा प्रदान किया जाता है। इसलिए यह पीएचडी हासिल करने के लिए आवश्यक ज्ञान और कौशल की मात्रा के लिए इसे शॉर्टहैंड के रूप में उपयोग करने के लिए समझ में आता है। दूसरे शब्दों में: ओपी का मतलब काफी स्पष्ट है :-)
टोबिया

10

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

वैकल्पिक रूप से आप फ़ाइल के अंत में savefile के md5 को जोड़ सकते हैं, इसलिए यदि फ़ाइल के साथ छेड़छाड़ की गई है तो आप देखेंगे। तब आप इसका उपयोग या तो सेवगेम लोड करने से मना कर सकते हैं, या समर्थन टिकटों को उचित रूप से फ़्लैग करने के लिए, ताकि आप मैन्युअल रूप से संशोधित सेवगेम के कारण होने वाले मुद्दों पर समय बर्बाद न करें। फिर, यह आपके कोड को पढ़ने वाले किसी भी व्यक्ति को दरकिनार करने के लिए तुच्छ है।

यदि आप ऐसा कुछ चाहते हैं जो किसी ऐसे व्यक्ति द्वारा नहीं किया जा सकता है जिनके पास अपने डिवाइस पर बायनेरिज़ तक पहुंच है, तो आपको प्रोग्राम का हिस्सा एक सर्वर पर चलाने की आवश्यकता है, जो आपके नियंत्रण में है।

आपके अंतिम प्रश्न का उत्तर देने के लिए, एक कुंजी प्लस एन्क्रिप्शन प्रकार केवल सटीक एल्गोरिदम की पहचान करता है जिसे एन्क्रिप्ट / डिक्रिप्ट पर लागू करने की आवश्यकता होती है। आप एल्गोरिथ्म के बिना डेटा को एन्क्रिप्ट / डिक्रिप्ट नहीं कर सकते हैं जो परिभाषित करता है कि ऐसा कैसे करें।


आपकी दूसरी बात अच्छी है। यह फ़ाइल भ्रष्टाचार के मामले में समस्याओं को ट्रैक करने में भी मदद कर सकता है।
knowledge_is_power

4

सहेजें फ़ाइल में वास्तविक सहेजें डेटा का एक परिवर्तित SHA256 हैश स्टोर करें।

आपके द्वारा लोड किए गए डेटा के SHA256 मूल्य पर संग्रहीत हैश की तुलना करें।

यदि यह मेल नहीं खाता है, तो उन्होंने फ़ाइल को धोखा दिया है या दूषित किया है।

स्पष्ट करने के लिए संपादित करें: यह एंटी-चीट सिस्टम को क्रैक करना अधिक कठिन बनाता है लेकिन फिर भी संभव है


7
संशोधन करने के बाद कुछ भी नहीं हैश को फिर से पुनर्गठित करने से लोगों को रोकता है। इसके अलावा, मुझे समझ में नहीं आता है कि अभी भी ऐसे लोग क्यों हैं जो टूटी हुई एमडी 5 एल्गोरिथ्म को इसके सभी ज्ञात क्रिप्टोग्राफिक कमजोरियों की वकालत करते हैं जब एसएचए-256 (हस्ताक्षर के लिए) या बीक्रिप्ट (पासवर्ड के लिए) जैसे बेहतर विकल्प हैं।
फिलिप

1
सरल, तेज, और पूरी तरह से टूट गया।
डेडएमजी

2
@DeadMG यह डिजाइन से टूट गया है, क्योंकि उपयोगकर्ता के पास बायनेरिज़ तक पहुंच है जिसमें कुंजी होनी चाहिए। एक मजबूत हैश का उपयोग करना या एईएस जैसी किसी चीज़ के साथ फ़ाइल को एन्क्रिप्ट करना संसाधनों की बर्बादी और खराब डिज़ाइन होगा, क्योंकि यह कोई अतिरिक्त सुरक्षा प्रदान नहीं करता है , लेकिन लागत में वृद्धि करता है। +1 क्योंकि डाउनवोट अवांछनीय है।
पीटर - उन्बान रॉबर्ट हार्वे

7
@Philipp क्योंकि इस मामले में MD5 स्पष्ट रूप से SHA-256 से बेहतर है। वर्णित दृष्टिकोण से क्या आवश्यक है एक सस्ता चेकसम एल्गोरिथ्म है, जो कि वास्तव में एमडी 5 है।
पीटर - अनबन रॉबर्ट हार्वे

3
@ transistor09 अगर यह विशुद्ध रूप से ग्राहक पक्ष है, तो हम कुछ भी सुनिश्चित नहीं कर सकते हैं और एक चेकसम काम करता है और साथ ही ग्राहक को पूरी चीज़ को एन्क्रिप्ट करने का काम करता है। किसी भी तरह से, यह फटा जा सकता है।
लोल्म्स

1

मैं एक मानक एन्क्रिप्शन एल्गोरिथ्म का उपयोग करूंगा (क्योंकि यह सहेजी गई फ़ाइल पर क्रिप्टो-विश्लेषण करना कठिन बनाता है) लेकिन सबसे अधिक इस्तेमाल किए गए शीर्ष पांच में से एक नहीं, और इसे अपने कोड में छिपाएं (क्योंकि यह समझना मुश्किल है कि यह क्या एल्गोरिदम है? है और जहां कुंजी है।)

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

क्या यह सब कुछ अर्थपूर्ण है, एक और विषय है।


मुझे नहीं पता ... इसे सिर्फ एक खेल के लिए कठिन बनाना ... लेकिन मदद के लिए धन्यवाद! मैं पूरी कोशिश करूंगा!
डैनियल बेजर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.