आपने डेटाबेस में डेटा को एन्क्रिप्ट करने की सबसे बड़ी समस्या पर ठोकर खाई:
➽ चाबी कहाँ स्टोर करें?
एन्क्रिप्शन डेटा को सुरक्षित करने की समस्या को हल नहीं कर सकता है, यह केवल इसे एक कुंजी पर "केंद्रित" कर सकता है। आप जहां कहीं भी कुंजी स्टोर करते हैं, आपका एप्लिकेशन डेटा को डिक्रिप्ट करने में सक्षम होना चाहिए, इसलिए एक हमलावर भी कर सकता है। इस समस्या के दो संभावित समाधान हैं जिनके बारे में मुझे पता है:
- कुंजी को यथासंभव सुरक्षित स्थान पर रखें। इसका मतलब है, इसे निश्चित रूप से www-root निर्देशिका के बाहर सर्वर पर एक दुर्गम निर्देशिका में रखा जाना चाहिए। डेटा के महत्व के आधार पर, आप एन्क्रिप्शन को किसी अन्य समर्पित सर्वर से आउटसोर्स करने पर भी विचार कर सकते हैं।
- कुंजी को बिल्कुल भी संगृहीत न करें और इसे उपयोगकर्ता पासवर्ड से प्राप्त करें। यह वास्तव में एकमात्र सुरक्षित तरीका है, क्योंकि सर्वर तब भी डेटा को डिक्रिप्ट नहीं कर सकता है। विपक्ष निश्चित रूप से यह है कि उपयोगकर्ता को हर बार आपकी सेवा का उपयोग करने पर पासवर्ड दर्ज करने की आवश्यकता होती है। यदि उपयोगकर्ता पासवर्ड बदलता है, तो आपको सभी डेटा को फिर से एन्क्रिप्ट करना होगा। यदि उपयोगकर्ता पासवर्ड भूल जाता है, तो डेटा खो जाता है।
पी.एस. मैं पहले . डेटा को एन्क्रिप्ट करने की अनुशंसा करता हूं इसे डेटाबेस में संग्रहीत करना, क्योंकि MySQL AES_ENCRYPT IV के बिना ECB मोड का उपयोग करता है। यह एक निश्चित मूल्य की खोज करने की अनुमति देता है, लेकिन कम सुरक्षित है (मुझे पूरा यकीन है कि आप पासवर्ड से खोजना नहीं चाहते हैं)।