2010-09-21 13 views
16

विभिन्न प्रकार के बेवकूफ कारणों के लिए, किसी दिए गए फॉर्म वैरिएबल की अधिकतम लंबाई जिसे हम बाहरी सर्वर पर पोस्ट कर रहे हैं वह 12 वर्ण है।md5 से छोटा php cipher?

मैं उस मान को md5 के साथ अस्पष्ट करना चाहता था, लेकिन जाहिर है कि 12 वर्ण जो काम नहीं करेंगे। क्या पहले से निर्मित PHP फ़ंक्शन वाला एक सिफर है जिसके परिणामस्वरूप कुछ 12 वर्ण या उससे कम हो जाएंगे?

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

किसी भी सलाह के लिए धन्यवाद।

+2

मैं एक 'str_rot13 में फेंकने की सिफारिश करने के लिए परीक्षा रहा हूँ के जोखिम में वृद्धि के बिना()' कहीं कहते हैं। एक और गंभीर नोट पर, यदि आपको डिक्रिप्ट किए गए संस्करण को पुनर्प्राप्त करने की आवश्यकता है, तो आप किसी भी हैशिंग फ़ंक्शन के बाद से 'md5()' का उपयोग नहीं कर सकते हैं, जो इसे लगभग एक-तरफा एन्क्रिप्शन बनाता है। – BoltClock

+0

कृपया सीज़र साइफर का उपयोग न करें। वहां से चुनने के लिए बहुत सारे छोटे/कमजोर एन्क्रिप्शन/डिक्रिप्शन एल्गोरिदम हैं जिन्हें आपके 12 चार मोल्ड फिट करने के लिए अनुकूलित किया जा सकता है। सीज़र सिफर को समझना बहुत आसान है। आखिर में आप एक पैटर्न को भी मार देंगे, यहां तक ​​कि एक नाक-ड्रैगर दिन के रूप में सादा देख सकता है। –

+0

आप में से कौन सा सुझाव देगा, जोएल? – tiredofcoding

उत्तर

14

यह this answer के अतिरिक्त है।

उत्तर एमडी 5 के 32 चरित्र प्रतिनिधित्व से पहले बारह वर्ण लेने का प्रस्ताव करता है। इस प्रकार जानकारी के 20 अक्षर खो जाएंगे - इसके परिणामस्वरूप रास्ता अधिक संभावित टकराव होंगे।

आप पहले बारह एक 16 चरित्र प्रतिनिधित्व के (कच्चे फार्म) वर्ण लेने के द्वारा जानकारी के नुकसान को कम कर सकते हैं:,

substr(md5($string, true), 0, 12); 

इस डेटा का 75% बनाए रखेंगे 32 के उपयोग जबकि चार फॉर्म केवल 37.5% डेटा बनाए रखता है।

+2

इसका परिणाम 12 * बाइट्स * है, जो आवश्यक नहीं हैं 12 * अक्षर * और यह गैर बाइनरी सुरक्षित कार्यों के साथ इसका उपयोग करने के लिए भी जोखिम भरा है, जो दुर्भाग्य से अभी भी बहुत आम हैं, क्योंकि वे पहले '\ 0' वर्ण पर छेड़छाड़ करेंगे। – CodesInChaos

+1

क्या 'md5 ($ string, true) 'गैर-दृश्यमान वर्ण भी वापस नहीं करता है? मुझे लगता है कि यह एचटीएमएल में समस्याएं पैदा करेगा - हैश को ब्राउज़र द्वारा urlencoded मिल सकता है और लंबाई में बदल सकता है ... – Philipp

8

यदि आपको केवल हैश की आवश्यकता है, तो आप अभी भी md5 हैश से पहले 12 वर्णों का उपयोग कर सकते हैं।

substr(md5($yourString), 0, 12); 
+0

मैं बस वही टाइप कर रहा था! –

+0

मुझे यह स्पष्ट करना चाहिए कि हमें अभी भी इसे डीकोड करने की आवश्यकता है। एक ऐसा मामला हो सकता है जहां एक एमडी 5 के पहले 12 वर्ण दूसरे जैसा ही हो। – tiredofcoding

+2

@tiredofcoding: MD5, किसी भी अन्य हैश के रूप में, एक तरफा कार्य है: आप * इसे डीकोड नहीं कर सकते हैं। आप जो चाहते हैं वह एक साइफर है, हैश नहीं। – casablanca

7

crc32() शायद कोशिश करें?

3

सभी उत्तरों कुछ डेटा (उच्च टक्कर संभावना) खोने का सुझाव दे रहे हैं, लेकिन आधार रूपांतरण का उपयोग करने का उपयोग करना एक बेहतर तरीका है: उदा। जैसा कि यहां वर्णित है http://proger.i-forge.net/Short_MD5/OMF

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

3

मैं के रूप में मैं ग्रहण करने के लिए आपको लगता है कि आपके एन्क्रिप्टेड मूल्य के लिए ....

भेज दिया जाता है स्क्रिप्ट के नियंत्रण में हैं भर में इस सुझाव को डाल करने के लिए मैं भी है ग्रहण करने के लिए है कि आप कई प्रपत्र फ़ील्ड्स बना सकते लेकिन उनमें प्रत्येक 12 वर्णों की लंबाई से अधिक लंबाई नहीं हो सकती है।

यदि ऐसा है, तो क्या आप केवल एक से अधिक फॉर्म फ़ील्ड नहीं बना सकते हैं और कई छिपे हुए फ़ील्ड में md5 स्ट्रिंग फैल सकते हैं?

आप एमडी 5 स्ट्रिंग को 8 के टुकड़ों में विभाजित कर सकते हैं और प्रत्येक खंड को एक छिपे हुए फॉर्म फ़ील्ड में सबमिट कर सकते हैं और फिर दूसरे छोर पर एक साथ जुड़ सकते हैं।

बस एक विचार ...

15

शायद यह आप एक 12 वर्ण स्ट्रिंग है कि आप एक URL में पारित कर सकते हैं उत्पन्न करने में मदद करेगा, टकराव

substr(base_convert(md5($string), 16,32), 0, 12); 
+1

यह स्वीकार्य उत्तर होना चाहिए। यह एक अधिक कॉम्पैक्ट प्रतिनिधित्व में पूर्ण MD5 हैश है। – Deebster

+1

यह पूर्ण MD5 हैश नहीं रखता है ... PHP दस्तावेज़ों के अनुसार, "चेतावनी: base_convert() आंतरिक" डबल "या" फ्लोट "प्रकार से संबंधित गुणों के कारण बड़ी संख्या में सटीकता खो सकता है।" 32-बिट सिस्टम पर, कम से कम 32 अंकों वाले हेक्स को बेस -32 परिणामों में परिवर्तित करने के लिए पिछले 16 अंकों में 0 इसे आज़माएं: प्रिंट करें base_convert (md5 ('foo'), 16, 32); परिणाम 5cnkcdmj62v000000000000000 में परिणाम। – mikeker

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