2011-10-26 19 views
6

मुझे एन्क्रिप्टेड डेटा स्टोर करने का एक तरीका चाहिए, इस तरह से कि मैं अभी भी क्वेरी चला सकता हूं। क्या यह भी संभव है?MySQL में 'क्वेरी-सक्षम' एन्क्रिप्टेड डेटा कैसे स्टोर करें?

कम से कम मुझे एक एन्क्रिप्शन algorythm की आवश्यकता है जो हमेशा एक ही इनपुट के लिए एक ही स्ट्रिंग देता है, इसलिए मैं उस स्ट्रिंग को एन्क्रिप्ट करके 'जॉन' नामक सभी उपयोगकर्ताओं को ढूंढ सकता हूं और डीबी में एन्क्रिप्टेड परिणाम की तलाश कर सकता हूं। PHP में, mcrypt हमेशा अलग-अलग तारों को लौटाता है (मुझे पता है कि यह सुरक्षा में सुधार के लिए उद्देश्य पर है)।

कोई विचार?

+1

mysql में एन्क्रिप्टेड डेटा को स्टोर करने के लिए, इसे खोजशब्द निष्पादित करने के लिए इसे डीक्रिप्ट करना होगा (मान लीजिए कि यह mysql php के साथ नहीं किया गया था)। यह बहुत धीमा होगा क्योंकि इंडेक्स भी आपकी मदद नहीं कर सका। –

+0

मुझे आपको यह पूछने का एक विचार है कि आपको एन्क्रिप्टेड डेटा स्टोर करने की आवश्यकता क्यों है? –

+0

क्योंकि यह डेटा है जो केवल उन लोगों के लिए पठनीय होना चाहिए जिन्हें वेब एप्लिकेशन में अधिकृत किया गया है (डीबी में नहीं)। बहुत से लोग इस डीबी के साथ काम करते हैं और पहुंच पढ़ते हैं। – HappyDeveloper

उत्तर

8

इस बात पर निर्भर करता है कि आप 'जॉन' नाम को कैसे संग्रहीत कर रहे हैं। यदि यह एक विशेष क्षेत्र में ही बात है, आप अगर 'जॉन' एक बड़ा स्ट्रिंग ('जॉन डो' या 'किंग जॉन, ब्रह्मांड के शासक') का हिस्सा है की तरह

SELECT ... 
FROM sometable 
WHERE cryptedfirstname = AES_ENCRYPT('John', $key) 

कुछ कर सकते हैं, तो आप के खिलाफ है कि

SELECT ... 
FROM sometime 
WHERE INSTR(AES_DECRYPT(cryptedFULLame, $key), 'John') > 0 

ध्यान दें कि मैं क्वेरी में डिक्रिप्शन कुंजी को एम्बेड कर रहा हूँ पूर्ण क्षेत्र और मैच डिक्रिप्ट करने के लिए होगा। उत्पादन प्रणाली के लिए बुरा विचार, लेकिन यह सिर्फ एक उदाहरण है।

... 
WHERE INSTR(cryptedFULLname, AES_ENCRYPT('John', $key)) 

वजह से कैसे एईएस और अधिकांश अन्य userful/सभ्य क्रिप्टो सिस्टम काम:

आप की तरह कुछ करने के लिए नहीं कर सकेंगे।

+0

धन्यवाद, बहुत उपयोगी है। कुछ बेवकूफ -1, आप स्पष्ट रूप से समस्या को समझ में नहीं आया। +1 – HappyDeveloper

+0

कोई बड़ी बात नहीं। Downvotes यहाँ मोटी और तेजी से उड़ते हैं। और स्पष्ट रूप से, -1 इस बिंदु पर इतना अंतर नहीं बनाता है ... –

+1

डाउन-वोट मुझसे नहीं था, लेकिन हो सकता है कि यह किसी ऐसे व्यक्ति से हो जो समझता है कि उस अच्छी सुरक्षा के लिए एक अप्रत्याशित के साथ एक सिफर मोड की आवश्यकता है चतुर्थ। यहां के सभी उदाहरणों की कमी है। – erickson

2

ऐसा लगता है जैसे आप इसे समझते हैं, लेकिन यह जोर दिया जाना चाहिए कि एक एन्क्रिप्शन एल्गोरिदम जो हमेशा दिए गए सादे पाठ के लिए एक ही सिफर टेक्स्ट उत्पन्न करता है तो टूट जाता है। यह सभी प्रकार के हमलों की ओर जाता है।

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

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

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

+0

जानना अच्छा है, धन्यवाद। खैर, कंपनी में किसी और को इस = पी से निपटना होगा, मैंने सिस्टम को डिजाइन नहीं किया था। +1 – HappyDeveloper

संबंधित मुद्दे